asp.net - proyecto - describa los pasos generales para realizar una conexión a base de datos sql server desde asp net
El ''System.Web.Security.SqlMembershipProvider'' requiere un esquema de base de datos compatible con la versión de esquema ''1'' (12)
Primero recibí este error después de olvidar ejecutar aspreg_sql en mi nuevo db. Una vez hecho esto recibí este error hasta que cerré Cassini o el servidor de desarrollo ASP.NET. Volvió a ejecutar y funcionó bien.
Tengo un SQL Server 2008 DB con muchas tablas llenas de datos y utilicé SQL Server Management Studio para generar un volcado de SQL usando el Asistente de Script: Tareas -> Generar Scripts -> Script Todos los objetos en la base de datos seleccionada y también seleccionando la opción a los datos del script Me aseguré de cambiar el valor de "Script for Server Version" a "SQL Server 2008". Luego creé un nuevo DB y ejecuté el volcado de SQL en el nuevo DB para generar una copia idéntica del antiguo DB. Luego asigné permisos a mi usuario predeterminado para el nuevo DB. Luego cambié la cadena de conexión en mi aplicación ASP.NET para usar la nueva base de datos. Pero cuando lo ejecuto, arroja la siguiente excepción:
Server Error in ''/myapp'' Application.
The ''System.Web.Security.SqlMembershipProvider'' requires a database schema compatible with schema version ''1''. However, the current database schema is not compatible with this version. You may need to either install a compatible schema with aspnet_regsql.exe (available in the framework installation directory), or upgrade the provider to a newer version.
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.
Exception Details: System.Configuration.Provider.ProviderException: The ''System.Web.Security.SqlMembershipProvider'' requires a database schema compatible with schema version ''1''. However, the current database schema is not compatible with this version. You may need to either install a compatible schema with aspnet_regsql.exe (available in the framework installation directory), or upgrade the provider to a newer version.
Source Error:
An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below.
Stack Trace:
[ProviderException: The ''System.Web.Security.SqlMembershipProvider'' requires a database schema compatible with schema version ''1''. However, the current database schema is not compatible with this version. You may need to either install a compatible schema with aspnet_regsql.exe (available in the framework installation directory), or upgrade the provider to a newer version.]
System.Web.Util.SecUtility.CheckSchemaVersion(ProviderBase provider, SqlConnection connection, String[] features, String version, Int32& schemaVersionCheck) +1977772
System.Web.Security.SqlMembershipProvider.CheckSchemaVersion(SqlConnection connection) +89
System.Web.Security.SqlMembershipProvider.GetPasswordWithFormat(String username, Boolean updateLastLoginActivityDate, Int32& status, String& password, Int32& passwordFormat, String& passwordSalt, Int32& failedPasswordAttemptCount, Int32& failedPasswordAnswerAttemptCount, Boolean& isApproved, DateTime& lastLoginDate, DateTime& lastActivityDate) +815
System.Web.Security.SqlMembershipProvider.CheckPassword(String username, String password, Boolean updateLastLoginActivityDate, Boolean failIfNotApproved, String& salt, Int32& passwordFormat) +105
System.Web.Security.SqlMembershipProvider.CheckPassword(String username, String password, Boolean updateLastLoginActivityDate, Boolean failIfNotApproved) +42
System.Web.Security.SqlMembershipProvider.ValidateUser(String username, String password) +78
System.Web.UI.WebControls.Login.AuthenticateUsingMembershipProvider(AuthenticateEventArgs e) +60
System.Web.UI.WebControls.Login.OnAuthenticate(AuthenticateEventArgs e) +119
System.Web.UI.WebControls.Login.AttemptLogin() +115
System.Web.UI.WebControls.Login.OnBubbleEvent(Object source, EventArgs e) +101
System.Web.UI.Control.RaiseBubbleEvent(Object source, EventArgs args) +37
System.Web.UI.WebControls.Button.OnCommand(CommandEventArgs e) +118
System.Web.UI.WebControls.Button.RaisePostBackEvent(String eventArgument) +166
System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument) +10
System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) +13
System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) +36
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +1565
Si realmente no has olvidado nada (vistas, SP''s, etc., etc.), googlear indica soluciones ''tontas'' como cerrar el proyecto y volver a abrir, reconstruir, o:
Lo que realmente hizo el truco fue pasar a través de la herramienta de configuración de ASP.NET (Visual Studio - en el menú del sitio web), tomando la aplicación fuera de línea y luego de nuevo en línea. Esto realmente hace un cambio en web.config (no estoy seguro de cuál fue el cambio). Entonces, después de desconectarlo, tuve que cargar web.config a la solución alojada. Luego volvió a poner la aplicación en línea, volvió a copiar web.config, etc.
Puede ser la respuesta.
Reiniciar el grupo de aplicaciones funcionó para mí
No soy en absoluto un gurú o programador de SQL o ASP.net, obtuve el trabajo por accidente, pero tuve el mismo problema y el error fue tonto:
En mi Web.Conf
las cadenas de conexión por lo general se verían así:
<add name="AgriConnectionString" connectionString="Data Source=./SQLEXPRESS; Initial Catalog=AgriBranch; pooling=true; Connection Timeout=120; Integrated Security=false;Persist Security Info=True; User ID=UserID; Password=PASS***WORD" providerName="System.Data.SqlClient" />
Sin embargo, ayer, accidentalmente, mi fuente se veía así: "Data Source=./SQLEXPRESS"
.
Y obtuve el mismo error que se discutió.
Este error también explicaría por qué al desconectar el sitio y volver a conectarse con la utilidad de Visual Studio o al volver a compilarlo se solucionaría el error.
Es posible que deba ejecutar aspnet_regsql.exe para obtener los valores de esquema rellenos. Puede codificar los valores siempre y cuando tenga todos los objetos generados (tablas, vistas, sproc, etc.
Los pasos que tomé para resolver esto que funcionó fueron:
volver a ejecutar aspnet_regsql.exe aseguró los valores predeterminados donde reinició IIS.
Entonces funcionó ...
Pero si solo copia el esquema de la base de datos sin los valores, debe ejecutar ''aspnet_regsql.exe'' para rellenar los valores predeterminados.
el archivo se puede encontrar aquí (re: msdn): [unidad:] /% windir% / Microsoft.NET / Framework / version (está en 2.0 dir)
y aquí hay algo de información:
http://msdn.microsoft.com/en-us/library/ms229862%28v=vs.80%29.aspx
En mi caso, ninguna de las soluciones anteriores funcionó.
Eliminé applicationName = "/" del proveedor de membresía en webconfig que fue creado por visual studio y luego lo cargué en el servidor.
O puede organizar manualmente la fila de la aplicación en la tabla aspnet_Applications.
¡Ten una buena codificación!
Esto básicamente ocurre cuando copias / pasas la solución completa del sitio web. La configuración de ASP.NET para el servidor SQL debe configurarse por separado. Lo que significa que debe ejecutar aspnet_regsql desde el símbolo del sistema de Visual Studio y seguir las instrucciones correspondientes durante el asistente.
Intente actualizar el archivo de configuración web con la versión correcta de System.Web.Security.SqlRoleProvider
Puede encontrar la siguiente configuración en c: /windows/microsoft.net/framework/v4.0.30319 o en cualquier otra versión, allí puede encontrar el archivo de configuración. En él compruebe si los archivos de configuración de la máquina tienen la versión y la clave pública.
Para .net frameowork 4.0
<roleManager enabled="true" defaultProvider="SqlProvider">
<providers>
<clear/>
<add name="SqlProvider" connectionStringName="rolesDB" applicationName="/" type="System.Web.Security.SqlRoleProvider, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/>
</providers>
</roleManager>
para .NET Framework 2.0
<roleManager enabled="true" defaultProvider="SqlProvider">
<providers>
<clear/>
<add name="SqlProvider" connectionStringName="rolesDB" applicationName="/" type="System.Web.Security.SqlRoleProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/>
</providers>
</roleManager>
He encontrado una manera muy simple, simplemente pegue estos datos en la tabla aspnet_SchemaVersions
common 1 True
health monitoring 1 True
membership 1 True
personalization 1 True
profile 1 True
role manager 1 True
Tuve que usar algunos espacios para alinear los datos, ignorar los espacios en blanco
Tuve un problema similar y pude resolverlo agregando el valor predeterminado a la tabla aspnet_SchemaVersions. Estos valores predeterminados no se agregaron a la BD generada usando Tareas -> Generar Scripts.
Aquí una publicación útil
INSERT INTO dbo.aspnet_SchemaVersions
VALUES
(''common'', 1, 1),
(''membership'', 1, 1),
(''role manager'', 1, 1);
GO
Probé muchas de las opciones anteriores, pero ninguna de ellas pareció resolver el problema en ese momento (aunque pudieron haber ayudado y no me di cuenta).
El último paso que tomé [que funcionó] fue otorgar al usuario de SQL en mi cadena de conexión acceso a las funciones aspnet_ * instaladas por aspnet_regsql.exe. Mi usuario de SQL se configuró como db_owner en la base de datos, pero no era un administrador de sistema en la caja, no estoy seguro si eso importa.
Tan pronto como lo hice, y después de probar algunas de las opciones anteriores, todo funcionó de maravilla.
Publicación anterior, pero tenía una solución alternativa.
Mis cadenas de conexión en web.config
incluyeron Persist Security Info=True;
en ellos. Eliminar esto resolvió el error.