2010-07-20 25 views
51

Tengo un SQL Server 2008 DB con muchas tablas llenas de datos y utilicé SQL Server Management Studio para generar un volcado de SQL utilizando el Asistente de scripts: tareas -> Generar scripts -> Scripts de todos los objetos en la base de datos seleccionada y también seleccionando la opción de 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, se lanza la siguiente excepción -El 'System.Web.Security.SqlMembershipProvider' requiere un esquema de base de datos compatible con la versión de esquema '1'

  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 

Respuesta

45

Si realmente no ha olvidado nada (vistas, SP, etc, etc, etc), entonces buscando en Google indica que las soluciones 'tontas' como cierre el proyecto y la reapertura, reconstrucción, o:

Lo que realmente funcionó fue pasar a través de la herramienta de configuración ASP.NET (Visual Studio - en el menú del sitio web), desconectando la aplicación 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 la aplicación en línea, volvió a copiar web.config, etc.

Puede ser la respuesta.

+0

Rebuild funcionó genial = D – bloparod

+0

Gracias, me salvó un montón de tiempo. – AnonyMouse

+0

Funcionó para mí gracias .. – Selwyn

12

Al reiniciar el grupo de aplicaciones que funcionó para mí

+6

Eso me hizo querer llorar – Dann

+1

Para mí, confundió mis sentimientos más íntimos. –

+0

Esto debería tener más votos ascendentes - aunque otras soluciones abordan el caso cuando faltan datos, si está presente y todo se ve bien con sus tablas y luego lo apaga y enciende de nuevo, el truco para mí –

94

he encontrado una manera muy simple, basta con pegar 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 unos espacios para que los datos alineados , ignore los espacios en blanco

+4

no puedo creer que esto funcione ... maldita sea asp.net – Francisco

+0

este también fue mi problema. –

+0

Cómo diablos ... Gracias, Alex. Esto funcionó para mí. Tan aleatorio. Tan oscuro. – vbullinger

33

Tuve un problema similar y pude resolverlo agregando el valor predeterminado a la tabla aspnet_SchemaVersions. Estos valores predeterminados no se agregaron a la base de datos generada mediante las tareas -> Generar secuencias de comandos.

Aquí un útil post

INSERT INTO dbo.aspnet_SchemaVersions 
VALUES 
('common', 1, 1), 
('membership', 1, 1), 
('role manager', 1, 1); 
GO 
6

no soy en absoluto un gurú SQL o ASP.net o programador, consiguió el trabajo por accidente, pero no tenía el mismo problema y el error era tonta:

En mis Web.Conf las cadenas de conexión habría usualy ser algo como esto:

<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 me había accidentalmente mi fuente mirando lik e este "Data Source=./SQLEXPRESS".

Y recibí el mismo error que se discute.

Este error también explicaría por qué cuando se desconecta el sitio y se vuelve a conectar con la utilidad de Visual Studio o cuando se recompila corregirá el error.

2

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 tomaron para resolver este era el que trabajaba:

re-ran aspnet_regsql.exe garantiza los valores por defecto donde hay reinicia IIS.

Entonces funcionó ..

Pero si sólo tienes que copiar el esquema de base de datos sin los valores, es necesario ejecutar 'aspnet_regsql.exe' con el fin de rellenar los valores por defecto.

el archivo se puede encontrar aquí (re: MSDN): [unidad:] \% windir% \ Microsoft.NET \ Framework \ versión (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

+0

Creo que esta podría ser la forma oficial, así que fui con esto y funcionó bien. – Nenotlep

1

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 subí al servidor.

O puede crear manualmente la fila de la aplicación en la tabla aspnet_Applications.

¡Tenga una buena codificación!

0

Recibí este error por primera vez después de olvidarme de ejecutar aspreg_sql en mi nueva base de datos. Una vez hecho esto recibí este error hasta que cerré Cassini o el servidor de desarrollo ASP.NET. Volvió a ejecutar y funcionó bien.

0

Esto básicamente ocurre cuando copia/pasa 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.

4

intente actualizar el archivo de configuración web con la versión correcta de System.Web.Security.SqlRoleProvider

Puede encontrar la configuración más adelante en c: /windows/microsoft.net/framework/v4.0.30319 o cualquier otra versión , allí puedes encontrar el archivo de configuración. En él compruebe los archivos de configuración de la máquina para obtener la clave pública de la versión &.

Para frameowork .net 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> 
1

Probé muchas de las opciones anteriores, pero ninguno de ellos pareció resolver el problema en el momento (aunque ellos pueden 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 ya había probado algunas de las opciones anteriores, todo funcionó muy bien.

+1

¡Bienvenido a Stack Overflow! Por favor [formatee] (http://stackoverflow.com/help/formatting) su respuesta para mejorar su legibilidad. – ryanyuyu

0

Publicación anterior, pero tenía una solución alternativa.

Mis cadenas de conexión en el web.config incluyeron Persist Security Info=True; en ellas. Eliminar esto resolvió el error.

Cuestiones relacionadas