Domanda Errore MSSQL 'Il provider sottostante non è riuscito su Apri'


Stavo usando un .mdf per la connessione a a database e entityClient. Ora voglio cambiare la stringa di connessione in modo che non ci sarà .mdf file.

È il seguente connectionString corretta?

<connectionStrings>
   <!--<add name="conString" connectionString="metadata=res://*/conString.csdl|res://*/conString.ssdl|res://*/conString.msl;provider=System.Data.SqlClient;provider connection string=&quot;Data Source=.\SQL2008;AttachDbFilename=|DataDirectory|\NData.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True;MultipleActiveResultSets=True&quot;" 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=&quot;Data Source=.\SQL2008;Initial Catalog=NData;Integrated Security=True;Connect Timeout=30;User Instance=True;MultipleActiveResultSets=True&quot;" providerName="System.Data.EntityClient" />

Perché ottengo sempre l'errore:

Il provider sottostante non è riuscito in Open


190
2018-03-19 04:36


origine


risposte:


Ho avuto questo errore e ho trovato alcune soluzioni:

Guardando la tua stringa di connessione, sembra valida. ho trovato questo post del blog, il problema qui è che stavano usando Sicurezza integrata. Se si utilizza IIS, l'utente IIS deve accedere al database.

Se stai usando Entity Framework  con le transazioniEntity Framework apre e chiude automaticamente una connessione con ogni chiamata al database. Quindi, quando si utilizzano le transazioni, si sta tentando di diffondere una transazione su più connessioni. Questo eleva a MSDTC.

(Vedi questo riferimento per ulteriori informazioni.)

Cambiando il mio codice al seguente fisso:

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

192
2018-06-21 02:17



context.Connection.Open() non ha aiutato a risolvere il mio problema, quindi ho provato a abilitare "Consenti client remoti" nella configurazione di DTC, niente più errori.

In Windows 7 è possibile aprire la configurazione di DTC eseguendo dcomcnfg, Servizi componenti -> Computer -> Risorse del computer -> Distributed Transaction Coordinator -> Fare clic con il pulsante destro del mouse su DTC locale -> Sicurezza.


35
2017-10-26 10:28



Tu dovresti vedere innerException per vedere quale sia la causa interiore del lancio l'errore è

Nel mio caso, l'errore originale era:

Impossibile aprire il file fisico "D: \ Projects2 \ xCU \ xCU \ App_Data \ xCUData_log.ldf". Errore del sistema operativo 5: "5 (Accesso negato).".   Un tentativo di collegare un database con nome automatico per il file D: \ Projects2 \ xCU \ xCU \ App_Data \ xCUData.mdf non è riuscito. Esiste un database con lo stesso nome o il file specificato non può essere aperto oppure si trova sulla condivisione UNC.

che ha risolto dando il pieno permesso all'utente corrente per l'accesso correlato mdf e ldf file usando le proprietà dei file.


22
2018-05-05 17:52



Ho scoperto che il problema era che avevo il percorso del server all'interno della stringa di connessione in una di queste varianti:

SERVER\SQLEXPRESS
SERVER

Quando davvero dovrei avere:

.\SQLEXPRESS

Per qualche ragione ho avuto l'errore ogni volta che ha avuto difficoltà a localizzare l'istanza di SQL.


21
2017-07-21 10:19



Questo è solo un problema comune. Anche io ho affrontato questo problema. Sul computer di sviluppo, configurato con l'autenticazione di Windows, funziona perfettamente:

<add name="ShoppingCartAdminEntities" connectionString="metadata=res://*/ShoppingCartAPIModel.csdl|res://*/ShoppingCartAPIModel.ssdl|res://*/ShoppingCartAPIModel.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=.\SQlExpress;initial catalog=ShoppingCartAdmin;Integrated Security=True;multipleactiveresultsets=True;application name=EntityFramework&quot;" providerName="System.Data.EntityClient" />

Una volta ospitato in IIS con la stessa configurazione, ho ricevuto questo errore:

Il provider sottostante non è riuscito in Open

È stato risolto il cambiamento connectionString nel file di configurazione:

<add name="MyEntities" connectionString="metadata=res://*/ShoppingCartAPIModel.csdl|res://*/ShoppingCartAPIModel.ssdl|res://*/ShoppingCartAPIModel.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=MACHINE_Name\SQlExpress;initial catalog=ShoppingCartAdmin;persist security info=True;user id=sa;password=notmyrealpassword;multipleactiveresultsets=True;application name=EntityFramework&quot;" providerName="System.Data.EntityClient" />

Altri errori comuni potrebbero essere:

  1. Il servizio di database potrebbe essere arrestato
  2. Attributi dell'origine dati che puntano a un database locale con autenticazione Windows e ospitati in IIS
  3. Username e password potrebbero essere sbagliati.

11
2017-09-26 11:52



Quando ricevi questa eccezione, assicurati di espandere i dettagli e guarda il eccezione interna dettagli in quanto fornirà dettagli su perchél'accesso non è riuscito. Nel mio caso la stringa di connessione conteneva un utente che non aveva accesso al mio database.

Indipendentemente dal fatto che si utilizzi Integrated Security (il contesto dell'utente Windows connesso) o un singolo account SQL, assicurarsi che l'utente abbia un accesso corretto in "Sicurezza" per il database a cui si sta tentando di accedere per evitare questo problema.


10
2018-01-03 16:03



Ho avuto un problema simile con il SQL Server Express Edition sopra Windows Server 2003. Ho semplicemente aggiunto il servizio di rete come utente nella sicurezza del database.


6
2018-03-27 19:21



Ciò può anche accadere se si ripristina un database e l'utente esiste già con uno schema diverso, lasciando l'utente in grado di assegnare le autorizzazioni corrette.

Per correggere questa corsa:

USE your_database
EXEC sp_change_users_login 'Auto_Fix', 'user', NULL, 'cf'
GO
EXEC sp_change_users_login 'update_one', 'user', 'user'
GO

3
2017-11-05 15:46



Il servizio SQL Server Express non è stato impostato per il tostart automaticamente.

1) Vai al pannello di controllo 2) Strumenti di amministrazione 3) Servizio 4) Impostare SQL Server Express per l'avvio automatico facendo clic su di esso 5) Fare clic con il tasto destro e avviare il servizio

Spero che possa aiutarti.


3
2018-02-01 20:05



Assicurarsi che ogni valore di elemento nella stringa di connessione fornita sia corretto. Nel mio caso, stavo ottenendo lo stesso errore perché il nome del catalogo (nome del database) specificato nella stringa di connessione era errato.


2
2018-01-30 20:28