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

Решение

Имах тази грешка и намерих няколко решения:

Поглеждайки низът на връзката ви, той изглежда валиден. Намерих тази публикация в блога, проблемът тук е, че те използват Integrated Security. Ако работите с IIS, вашият потребител на IIS се нуждае от достъп до базата данни.

Ако използвате Entity Framework с транзакции, Entity Framework автоматично отваря и затваря връзка при всяко извикване на базата данни. Така че, когато използвате транзакции, вие се опитвате да разпределите транзакцията върху няколко връзки. Това води до MSDTC.

(Вижте тази препратка за повече информация)

Промяната на кода ми със следното го оправи:

using (DatabaseEntities context = new DatabaseEntities())
{
    context.Connection.Open();
    // the rest
}
Коментари (7)

context.Connection.Open() не помогна за решаването на проблема ми, така че опитах да разреша "Allow Remote Clients" в конфигурацията на DTC, вече няма грешка.

В Windows 7 можете да отворите конфигурацията на DTC, като стартирате dcomcnfg, Component Services -> Computers -> My Computer -> Distributed Transaction Coordinator -> Десен бутон на мишката върху Local DTC -> Security.

Коментари (2)

Открих, че проблемът е в това, че пътят до сървъра е включен в низ за свързване в един от тези варианти:

SERVER\SQLEXPRESS
SERVER

Когато всъщност трябваше да имам:

.\SQLEXPRESS

По някаква причина получавах грешката винаги, когато се затрудняваше да открие инстанцията на SQL.

Коментари (3)