MSSQL Error 'Основният доставчик не успя да се справи с Open'
Използвах .mdf
за свързване към база данни
и entityClient
. Сега искам да променя стринга за свързване, така че да няма файл .mdf
.
Правилно ли е следното connectionString
?
<connectionStrings>
<!--<add name="conString" connectionString="metadata=res://*/conString.csdl|res://*/conString.ssdl|res://*/conString.msl;provider=System.Data.SqlClient;provider connection string="Data Source=.\SQL2008;AttachDbFilename=|DataDirectory|\NData.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True;MultipleActiveResultSets=True"" providerName="System.Data.EntityClient" />-->
<add name="conString" connectionString="metadata=res://*/conString.csdl|res://*/conString.ssdl|res://*/conString.msl;provider=System.Data.SqlClient;provider connection string="Data Source=.\SQL2008;Initial Catalog=NData;Integrated Security=True;Connect Timeout=30;User Instance=True;MultipleActiveResultSets=True"" providerName="System.Data.EntityClient" />
Защото винаги получавам грешката:
Основният доставчик се провали при Open
211
3
Имах тази грешка и намерих няколко решения:
Поглеждайки низът на връзката ви, той изглежда валиден. Намерих тази публикация в блога, проблемът тук е, че те използват Integrated Security. Ако работите с IIS, вашият потребител на IIS се нуждае от достъп до базата данни.
Ако използвате Entity Framework с транзакции, Entity Framework автоматично отваря и затваря връзка при всяко извикване на базата данни. Така че, когато използвате транзакции, вие се опитвате да разпределите транзакцията върху няколко връзки. Това води до MSDTC.
(Вижте тази препратка за повече информация)
Промяната на кода ми със следното го оправи:
context.Connection.Open()
не помогна за решаването на проблема ми, така че опитах да разреша "Allow Remote Clients" в конфигурацията на DTC, вече няма грешка.В Windows 7 можете да отворите конфигурацията на DTC, като стартирате dcomcnfg, Component Services -> Computers -> My Computer -> Distributed Transaction Coordinator -> Десен бутон на мишката върху Local DTC -> Security.
Открих, че проблемът е в това, че пътят до сървъра е включен в низ за свързване в един от тези варианти:
Когато всъщност трябваше да имам:
По някаква причина получавах грешката винаги, когато се затрудняваше да открие инстанцията на SQL.