Error de MSSQL 'El proveedor subyacente falló en Abrir'

c# database-connection entity-framework sql-server

Pregunta

Estaba usando un .mdf para conectarme a una database y entityClient . Ahora quiero cambiar la cadena de conexión para que no haya ningún archivo .mdf .

¿La siguiente connectionString correcta?

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

Porque siempre me sale el error:

El proveedor subyacente falló en la apertura

Respuesta aceptada

Tuve este error y encontré algunas soluciones:

En cuanto a su cadena de conexión, parece válida. Encontré esta publicación de blog , el problema aquí es que estaban usando Seguridad Integrada . Si está ejecutando en IIS, su usuario de IIS necesita acceso a la base de datos.

Si está utilizando Entity Framework con transacciones , Entity Framework abre y cierra automáticamente una conexión con cada llamada a la base de datos. Por lo tanto, cuando utiliza transacciones, está intentando distribuir una transacción a través de múltiples conexiones. Esto eleva a MSDTC .

( Vea esta referencia para más información. )

Cambiando mi código a lo siguiente lo arreglé:

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

Respuesta popular

context.Connection.Open() no ayudó a resolver mi problema, así que intenté habilitar "Permitir clientes remotos" en la configuración de DTC, no más errores.

En Windows 7 puede abrir la configuración de DTC ejecutando dcomcnfg, Servicios de componentes -> Computadoras -> Mi computadora -> Coordinador de transacciones distribuidas -> Haga clic con el botón derecho en DTC local -> Seguridad.



Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué