Mai mult
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
211
3
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:
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.
Am descoperit că problema era că aveam calea serverului în șirul de conexiune într-una din aceste variante:
Când de fapt ar fi trebuit să am:
Din anumite motive, am primit eroarea ori de câte ori a avut dificultăți în localizarea instanței SQL.