Error MSSQL 'El proveedor subyacente falló al abrir'

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

¿Es correcta la siguiente 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" />

Porque siempre me sale el error:

El proveedor subyacente falló al abrir

Solución

Tuve este error y encontré algunas soluciones:

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

Si estás usando 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 se utilizan transacciones, se intenta repartir una transacción en varias conexiones. Esto se eleva a MSDTC.

(Ver esta referencia para más información)

Cambiando mi código por el siguiente se arregló:

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

context.Connection.Open() no ayudó a resolver mi problema así que probé a habilitar "Permitir Clientes Remotos" en la configuración de DTC, ya no hay error.

En windows 7 puedes abrir la configuración de DTC ejecutando dcomcnfg, Servicios de Componentes -> Equipos -> Mi Equipo -> Coordinador de Transacciones Distribuidas -> Clic derecho a DTC Local -> Seguridad.

Comentarios (2)

Descubrí que el problema era que tenía la ruta del servidor dentro de la cadena de conexión en una de estas variantes:

SERVER\SQLEXPRESS
SERVER

Cuando en realidad debería tener:

.\SQLEXPRESS

Por alguna razón me sale el error cuando tiene dificultades para localizar la instancia de SQL.

Comentarios (3)