MSSQL Error 'The underlying provider failed on Open'

Am folosit un .mdf pentru conectarea la o database și la entityClient. Acum vreau să schimb șirul de conectare astfel încât să nu existe niciun fișier .mdf.

Este corectă următoarea 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" />

Pentru că întotdeauna primesc eroarea:

Furnizorul de bază a eșuat la Open

Soluția

Am avut această eroare și am găsit câteva soluții:

Dacă ne uităm la șirul de conexiune, acesta pare valid. Am găsit această postare pe blog, problema aici este că ei foloseau Integrated Security. Dacă rulezi pe IIS, utilizatorul IIS trebuie să aibă acces la baza de date.

Dacă folosiți Entity Framework cu Tranzacții, Entity Framework deschide și închide automat o conexiune la fiecare apel la baza de date. Așadar, atunci când utilizați tranzacții, încercați să repartizați o tranzacție pe mai multe conexiuni. Acest lucru se ridică la MSDTC.

(Consultați această referință pentru mai multe informații.)

Schimbarea codului meu cu următorul a rezolvat problema:

using (DatabaseEntities context = new DatabaseEntities())
{
    context.Connection.Open();
    // the rest
}
Comentarii (7)

context.Connection.Open() nu a ajutat la rezolvarea problemei mele, așa că am încercat să activez "Allow Remote Clients" în configurația DTC, nu mai apare nicio eroare.

În Windows 7 puteți deschide configurația DTC executând dcomcnfg, Component Services -> Computers -> My Computer -> Distributed Transaction Coordinator -> Clic dreapta pe Local DTC -> Security.

Comentarii (2)

Am descoperit că problema era că aveam calea serverului în șirul de conexiune într-una din aceste variante:

SERVER\SQLEXPRESS
SERVER

Când de fapt ar fi trebuit să am:

.\SQLEXPRESS

Din anumite motive, am primit eroarea ori de câte ori a avut dificultăți în localizarea instanței SQL.

Comentarii (3)