c# - traduccion - the underlying provider failed on open iis
Error de MSSQL ''El proveedor subyacente falló en Abrir'' (30)
Asegúrese de que cada valor de elemento en la cadena de conexión que se suministra es correcto. En mi caso, recibí el mismo error porque el nombre del catálogo (nombre de la base de datos) especificado en la cadena de conexión era incorrecto.
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="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ó en la apertura
Copié los archivos de la base de datos (.mdf / .ldf) a la carpeta App_Data para deshacerme de esta excepción.
Cuando reciba esta excepción, asegúrese de expandir los detalles y mirar los detalles de las excepciones internas, ya que proporcionará detalles sobre por qué falló el inicio de sesión. En mi caso, la cadena de conexión contenía un usuario que no tenía acceso a mi base de datos.
Independientemente de si usa Seguridad Integrada (el contexto del Usuario de Windows registrado) o una cuenta SQL individual, asegúrese de que el usuario tenga acceso adecuado en "Seguridad" para la base de datos a la que intenta acceder para evitar este problema.
Debería ver la excepción interna para ver cuál es la causa interna del lanzamiento del error.
En mi caso, el error original fue:
No se puede abrir el archivo físico "D: / Projects2 / xCU / xCU / App_Data / xCUData_log.ldf". Error del sistema operativo 5: "5 (Acceso denegado)". Error al intentar adjuntar una base de datos con nombre automático para el archivo D: / Projects2 / xCU / xCU / App_Data / xCUData.mdf. Existe una base de datos con el mismo nombre o no se puede abrir el archivo especificado o se encuentra en el recurso compartido UNC.
que se resolvió dando el permiso completo al usuario actual para acceder a archivos mdf
y ldf
relacionados utilizando las propiedades de los archivos.
El servicio SQL Server Express no se configuró para iniciarse automáticamente.
1) Vaya al panel de control 2) Herramientas administrativas 3) Servicio 4) Configure SQL Server Express para que se inicie automáticamente haciendo clic en él 5) Haga clic derecho e inicie el servicio
Espero que le ayudará.
En IIS, configure la Identidad de grupo de aplicaciones como Usuario de cuenta de servicio o Cuenta de administrador o cuenta de hormiga que tenga permiso para realizar la operación en esa Base de datos.
En mi caso tuve una discrepancia entre el nombre de la cadena de conexión que estaba registrando en el constructor del contexto y el nombre en mi web.config. Simple error causado por copiar y pegar: D
public DataContext()
: base(nameOrConnectionString: "ConnStringName")
{
Database.SetInitializer<DataContext>(null);
}
Encontré 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 realmente debería tener:
./SQLEXPRESS
Por alguna razón recibí el error cada vez que tenía dificultades para localizar la instancia de SQL.
Este es un problema común solamente. Incluso me he enfrentado a este problema. En la máquina de desarrollo, configurada con la autenticación de Windows, funciona perfectamente:
<add name="ShoppingCartAdminEntities" connectionString="metadata=res://*/ShoppingCartAPIModel.csdl|res://*/ShoppingCartAPIModel.ssdl|res://*/ShoppingCartAPIModel.msl;provider=System.Data.SqlClient;provider connection string="data source=./SQlExpress;initial catalog=ShoppingCartAdmin;Integrated Security=True;multipleactiveresultsets=True;application name=EntityFramework"" providerName="System.Data.EntityClient" />
Una vez alojado en IIS con la misma configuración, recibí este error:
El proveedor subyacente falló en la apertura
Se resolvió cambiando connectionString
en el archivo de configuración:
<add name="MyEntities" connectionString="metadata=res://*/ShoppingCartAPIModel.csdl|res://*/ShoppingCartAPIModel.ssdl|res://*/ShoppingCartAPIModel.msl;provider=System.Data.SqlClient;provider connection string="data source=MACHINE_Name/SQlExpress;initial catalog=ShoppingCartAdmin;persist security info=True;user id=sa;password=notmyrealpassword;multipleactiveresultsets=True;application name=EntityFramework"" providerName="System.Data.EntityClient" />
Otros errores comunes podrían ser:
- El servicio de base de datos podría ser detenido
- Atributos de origen de datos que apuntan a una base de datos local con autenticación de Windows y alojados en IIS
- El nombre de usuario y la contraseña pueden estar equivocados.
Esto también puede suceder si restaura una base de datos y el usuario ya existe con un esquema diferente, lo que le impide asignar los permisos correctos.
Para corregir esta ejecución:
USE your_database
EXEC sp_change_users_login ''Auto_Fix'', ''user'', NULL, ''cf''
GO
EXEC sp_change_users_login ''update_one'', ''user'', ''user''
GO
La definición de una nueva regla de Firewall de Windows para SQL Server (y para el puerto 1433) en la máquina del servidor resuelve este error (si su nombre de servidor, nombre de inicio de sesión de usuario o contraseña no es incorrecto en su cadena de conexión ...).
Me deshice de esto al restablecer IIS , pero aún uso la Integrated Authentication
en la cadena de conexión.
Para mí fue un simple error:
Utilicé Amazon EC2 , y usé mi dirección IP elástica en la cadena de conexión, pero cuando cambié las direcciones IP olvidé actualizar la cadena de conexión.
Publiqué un problema similar aquí, trabajando con una base de datos SQL 2012 alojada en Amazon RDS. El problema estaba en la cadena de conexión: tenía las propiedades " Nombre de aplicación" y "Aplicación" allí. Una vez que quité esos, funcionó.
Entity Framework 5 y Amazon RDS: "El proveedor subyacente falló en Open".
Si obtiene este error en una aplicación web ASP.NET, además de otras cosas mencionadas, verifique lo siguiente:
- Permisos de seguridad del usuario de la base de datos (a los cuales los usuarios pueden acceder a su base de datos).
- Verifique su grupo de aplicaciones en IIS y asegúrese de que sea el correcto que tenga acceso a su base de datos.
También he tenido este error si no se especifica el nombre de la instancia de SQL Server y el host de SQL tiene varias instancias de SQL instaladas. Aquí hay un par de ejemplos para aclarar:
La siguiente cadena de conexión da como resultado la excepción "El proveedor subyacente falló en Abrir" sin ninguna excepción interna en una aplicación de .NET WebForms:
connectionString="metadata=res://*/Entities.csdl|res://*/Entities.ssdl|res://*/Entities.msl;provider=System.Data.SqlClient;provider connection string="Data Source=localhost;Initial Catalog=Entities;User ID=user;Password=password;MultipleActiveResultSets=True"" providerName="System.Data.EntityClient"
La siguiente cadena de conexión se ejecuta como se esperaba en una aplicación .net WebForms donde el entorno SQL tiene varias instancias. Raro, lo sé, pero tengo algunas instancias de SQL diferentes en mi caja de desarrollo para acomodar diferentes proyectos:
connectionString="metadata=res://*/Entities.csdl|res://*/Entities.ssdl|res://*/Entities.msl;provider=System.Data.SqlClient;provider connection string="Data Source=localhost/SQLSERVER2014;Initial Catalog=Entities;User ID=user;Password=password;MultipleActiveResultSets=True"" providerName="System.Data.EntityClient"
Tengo el mismo error que encontré. Eso es cuando cambio mi conexión. Secuencia a una nueva fuente de datos. Olvido cambiar el nombre de usuario y la contraseña para la nueva base de datos.
Tuve el mismo problema hace unos días, usando "Integrated Security = True;" en la cadena de conexión, debe ejecutar la identidad del grupo de aplicaciones en "sistema local". Seguro que esto no se recomienda, pero para realizar la prueba hace el trabajo.
Así es como puede cambiar la identidad en IIS 7: http://www.iis.net/learn/manage/configuring-security/application-pool-identities
Tuve el mismo problema pero lo que funcionó para mí fue eliminarlo de la Cadena de conexión:
persist security info=True
Tuve este error repentinamente sucedió de la nada en uno de nuestros sitios. En mi caso, ¡resultó que la contraseña del usuario de SQL había expirado! Desmarcar el cuadro de caducidad de la contraseña en SQL Server Management Studio hizo el truco!
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 varias 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
}
Tuve este problema porque el inicio de sesión del grupo de aplicaciones con el que se ejecutaba esta aplicación había cambiado.
En IIS:
Encuentre el grupo de aplicaciones haciendo clic en su sitio y accediendo a Configuración básica.
Vaya a Grupos de aplicaciones.
Haga clic en el grupo de aplicaciones de su sitio.
Haga clic en Configuración avanzada.
En Identidad, ingrese el nombre de usuario y contraseña de la cuenta.
Reinicie su sitio y vuelva a intentarlo.
Tuve un error similar con la excepción interna de la siguiente manera:
La operación no es válida para el estado de la transacción.
Podría resolverlo habilitando la configuración de seguridad DTC.
Vaya a Propiedades de DTC, en la pestaña Seguridad, verifique lo siguiente
- Acceso DTC a la red
- Permitir clientes remotos
- Comunicación del administrador de transacciones
- Permitir entrada
- Permitir saliente
Tuve un problema similar con SQL Server Express Edition en Windows Server 2003 . Simplemente agregué el servicio de red como usuario en la seguridad de la base de datos.
Tuve un problema similar con las excepciones debido al estado de conexión, luego me di cuenta de que tenía mi variable de clase de servicio de dominio marcada como estática (por error).
Supongo que una vez que la biblioteca de servicios se carga en la memoria, cada nueva llamada termina utilizando el mismo valor variable estático (instancia de servicio de dominio), lo que genera conflictos a través del estado de conexión.
También creo que cada llamada de cliente dio como resultado un nuevo subproceso, por lo que múltiples subprocesos que acceden a la misma instancia de servicio de dominio se equiparan a un choque de trenes.
Tuve un problema similar: en mis ejecuciones de casos de prueba siempre recibí este error. Descubrí que mi "Servicio de transacciones distribuidas" no se inició (ejecute: services.msc -> start "Servicios de transacciones distribuidas" (lo mejor es configurarlo para que se inicie automáticamente)). Después de que hice eso, funcionó de maravilla ...
Un error común que hice porque estaba moviendo la aplicación de una vez PC a otra y ninguna de las anteriores funcionó porque olvidé copiar la cadena de conexión tanto en App.Config como en Web.Config.
Yo también estaba enfrentando el mismo problema. Ahora lo he hecho eliminando el nombre de usuario y la contraseña de la cadena de conexión.
en mi caso, la dirección del servidor ha sido cambiada por el administrador del servidor, así que tuve que cambiar la cadena de conexión a la nueva dirección del servidor
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.