代码之家  ›  专栏  ›  技术社区  ›  Arunabh Das

“System.Web.Security.SqlMembershipProvider”需要与架构版本“1”兼容的数据库架构

  •  55
  • Arunabh Das  · 技术社区  · 14 年前

    我有一个SQL Server 2008数据库,其中有许多充满数据的表,我使用SQL Server Management Studio通过使用脚本向导生成SQL转储:Tasks->生成脚本->为选定数据库中的所有对象编写脚本,并选择为数据编写脚本的选项。我确保将“scriptforserverversion”的值更改为“sqlserver2008”。然后我创建了一个新数据库,并在新数据库上运行SQL转储,以生成旧数据库的相同副本。然后我将默认用户的权限分配给新数据库。然后我更改了ASP.NET应用程序上的连接字符串以使用新的数据库。但是当我运行它时,它抛出以下异常-

                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
    
    12 回复  |  直到 14 年前
        1
  •  52
  •   Tobiasopdenbrouw    14 年前

    如果你真的没有忘记任何东西(视图、SP等),那么google表示“愚蠢”的解决方案,比如关闭项目并重新打开、重建或:

    真正起作用的是通过ASP.NET配置实用程序(VisualStudio-在“网站”菜单下),使应用程序脱机,然后重新联机。这实际上只是对web.config进行了更改(不完全确定更改是什么)。因此,在将其脱机后,我必须将web.config上载到托管解决方案。然后将应用程序重新联机,重新复制web.config等。

    也许是答案。

        2
  •  109
  •   GEOCHET S.Lott    10 年前

    我找到了一个非常简单的方法,只要把这个数据粘贴到 aspnet_SchemaVersions 桌子

    common              1   True
    health monitoring   1   True
    membership          1   True
    personalization     1   True
    profile             1   True
    role manager        1   True
    

    我不得不使用一些空格使数据对齐,忽略空白空间。

        3
  •  40
  •   GEOCHET S.Lott    10 年前

    我有一个类似的问题,我能够解决它添加默认值表aspnet\u SchemaVersions。 此默认值未添加到使用任务生成的数据库->生成脚本。

    这里有一个有用的 post

    INSERT INTO dbo.aspnet_SchemaVersions 
    VALUES
    ('common', 1, 1),
    ('membership', 1, 1),
    ('role manager', 1, 1);
    GO
    
        4
  •  16
  •   Phill Q    13 年前

    重新启动应用程序池对我有用

        5
  •  6
  •   Pablo Claus Venkata K. C. Tata    12 年前

    我根本不是SQL或ASP.net专家或程序员,偶然得到了这份工作,但我也遇到了同样的问题,这个错误很愚蠢:

    在我的 Web.Conf 连接字符串通常如下所示:

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

    "Data Source=./SQLEXPRESS" .

    我得到了和我们讨论的一样的错误。

    这个错误也解释了为什么在使用visualstudio的实用程序使站点离线并重新联机时,或者在重新编译时,它会修复错误。

        6
  •  6
  •   Mohit Verma    10 年前

    您可以在c:/windows/microsoft.net/framework/v4.0.30319或任何其他版本中找到以下配置,在那里您可以找到配置文件。检查机器配置文件

    对于.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>
    

    对于.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>
    
        7
  •  3
  •   hanzolo Si Zi    12 年前

    您可能必须运行aspnet\u regsql.exe才能填充架构值。只要拥有所有生成的对象(表、视图、存储过程等),就可以硬编码这些值。。

    为了解决这个问题,我采取了以下措施:

    重新运行aspnet\u regsql.exe 确保默认值 重新启动IIS。

    然后成功了。。

    但是,如果只是复制数据库模式而不复制值,则需要运行“aspnet\u regsql.exe”来填充默认值。

    文件可在此处找到(回复:msdn):

    以下是一些信息:
    http://msdn.microsoft.com/en-us/library/ms229862%28v=vs.80%29.aspx

        8
  •  1
  •   Behzad    11 年前

    在我的情况下,上述两种解决方案都不起作用。

    或者可以手动将应用程序行装箱到aspnet\u Applications表中。

    祝你编码愉快!

        9
  •  1
  •   jtoth3    9 年前

    我尝试了上面的许多选项,但当时似乎没有一个能解决问题(尽管它们 可以

    我采取的最后一步[有效]是授予连接字符串中的SQL用户访问aspnet\u regsql.exe安装的aspnet\ux角色的权限。我的SQL用户被设置为数据库的db\u所有者,但不是系统管理员-不确定这是否重要。

    之后 我已经试过上面的一些方法了,一切都很好。

        10
  •  0
  •   user754916    11 年前

        11
  •  0
  •   Altaf Patel    10 年前

    这基本上来当你复制/过去完整的网站解决方案。SQL server的ASP.NET配置应单独配置。这意味着您应该在visualstudio命令提示符下运行aspnet\u regsql,并在向导执行期间遵循相应的说明。

        12
  •  0
  •   Rob Scott Andrey    7 年前

    我的连接字符串 web.config Persist Security Info=True; 在他们身上。删除此项解决了错误。