245 votes

Le fournisseur sous-jacent a échoué à l'ouverture

J'utilisais .mdf pour me connecter à DB et à entityClient. Maintenant, je veux changer la chaîne de connexion pour qu'il n'y ait pas de .mdf

Est ce connectionString correct

 <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" />
 

parce que j'obtiens toujours l'erreur The underlying provider failed on Open ?

231voto

Christian Payne Points 3526

J'ai eu cette erreur et a trouvé quelques solutions:

Regarder votre chaîne de connexion, il est valide. J'ai trouvé ce post de blog, le problème, c'est qu'ils ont été à l'aide de la Sécurité Intégrée. Si vous utilisez IIS, IIS utilisateur a besoin d'accéder à la base de données.

Si vous êtes en utilisant Entity Framework avec des Transactions, Entity Framework s'ouvre et se ferme automatiquement une connexion avec chaque base de données d'appel. Donc, lorsque vous utilisez les transactions, vous tentez de propagation d'une transaction sur les connexions multiples. Cette élève de ms DTC.

(Voir cette référence et ce un pour plus d'informations.)

Modification de mon code pour le fixe suivants:

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

41voto

kerem Points 1067

context.Connection.Open() n'a pas aidé à résoudre mon problème, alors j'ai essayé d'activer "Autoriser les clients distants" dans la configuration DTC, sans plus d'erreur.

25voto

dooburt Points 1329

J'ai trouvé que le problème était que j'avais le chemin du serveur dans la chaîne de connexion dans l'une de ces variantes:

 SERVER\SQLEXPRESS
SERVER
 

Quand vraiment je devrais avoir:

 .\SQLEXPRESS
 

Pour une raison quelconque, j'ai eu l'erreur chaque fois qu'il avait des difficultés à localiser l'instance de SQL.

16voto

JaiSankarN Points 61

C'est un problème courant, même j'ai été confronté à ce problème. Dans le développement de la machine configurée avec l'authentification windows, il est parfaitement fonctionné

<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" />

une fois hébergés dans IIS avec la même configuration eu cette erreur.

Le fournisseur sous-jacent échoué sur Ouvrir

Résolu à changer dans la connectionString dans le fichier de config

<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" />

D'autres erreurs les plus courantes pourraient être

  1. Service de base de données pourrait être arrêté
  2. Source de données les attributs de pointage de la bd Locale avec l'Authentification Windows et hébergés dans IIS
  3. Nom d'utilisateur et le Mot de passe est peut-être erroné.

Merci, JaiSankar

5voto

Par6 Points 143

J'ai eu un problème similaire avec SQL Express sur le serveur Windows 2003. Il suffit d'ajouter le service réseau en tant qu'utilisateur sur la base de données Security.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X