找不到存储过程'dbo.aspnet_CheckSchemaVersion'

时间:2010-01-29 23:18:30

标签: sql sql-server stored-procedures

我正在使用WinHost.com来托管我的网站。 SQL数据库/成员资格系统在我的本地计算机上运行良好,但上传到服务器时它不起作用。我已经正确地遵循了所有步骤。我已经联系了对我服务的支持,但已经过了2周而没有回复。

当我尝试在我的网站上的会员页面上登录或注册新用户时,我一直收到此错误。

Server Error in '/' Application.
--------------------------------------------------------------------------------

Could not find stored procedure 'dbo.aspnet_CheckSchemaVersion'. 
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.Data.SqlClient.SqlException: Could not find stored procedure 'dbo.aspnet_CheckSchemaVersion'.

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: 


[SqlException (0x80131904): Could not find stored procedure 'dbo.aspnet_CheckSchemaVersion'.]
   System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection) +1953274
   System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection) +4849707
   System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj) +194
   System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj) +2392
   System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString) +204
   System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async) +954
   System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, DbAsyncResult result) +162
   System.Data.SqlClient.SqlCommand.InternalExecuteNonQuery(DbAsyncResult result, String methodName, Boolean sendToPipe) +175
   System.Data.SqlClient.SqlCommand.ExecuteNonQuery() +137
   System.Web.Util.SecUtility.CheckSchemaVersion(ProviderBase provider, SqlConnection connection, String[] features, String version, Int32& schemaVersionCheck) +378
   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




--------------------------------------------------------------------------------
Version Information: Microsoft .NET Framework Version:2.0.50727.4200; ASP.NET Version:2.0.50727.4016 

有人可以告诉我为什么会出现这个错误(显然它找不到东西......),以及我如何修复它?

谢谢大家

巴尔

8 个答案:

答案 0 :(得分:156)

您是否针对WinHost.com的SQL服务器运行aspnet_regsql.exe

aspnet_regsql.exe -S DBServerName -U DBLogin -P DBPassword -A all -d DBName

如果您不知道上面的命令在哪里运行,那么您只需运行'aspnet_regsql.exe'可执行文件。

要找到此文件,请按Windows键+ r打开您的RUN命令框,并在%windir%\Microsoft.NET\Framework\v4.0.30319下面输入命令,然后按Enter键,然后找到'aspnet_regsql.exe'文件。它将打开一个向导,您可以按照该向导来解决此错误。

当您在asp.net mvc项目中未启用角色时,主要会发生此错误在自动创建aspnet身份表之前启动。

您需要确保运行此命令,以便在WinHost.com的SQL服务器上创建表和对象。

答案 1 :(得分:28)

从开始菜单的Visual Studio工具文件夹中打开visual studio命令提示符 并输入 aspnet_regsql

并按照向导为asp.net成员资格和角色提供程序注册数据库。

答案 2 :(得分:10)

我之前见过这个。您使用的数据库没有成员资格,角色管理和配置文件功能所需的数据库元素。所以你有几个选择:

  1. 复制表格,存储过程和使用SQL Management Studio或类似应用程序从本地SQL Server查看
  2. 使用aspnet_regsql.exe tool按照此post 中的说明重新安装脚本(我不相信如果它被锁定,您可以使用该工具对抗远程数据库。因此,您必须导出脚本并手动运行它们

答案 3 :(得分:5)

我遇到同样的问题 - 我在Visual Studio中从SQL Object manager复制/粘贴connectionString,忘记输入Initial Catalog=YourDatabaseName

答案 4 :(得分:3)

检查主机上存储过程所属的架构 - 可能是它不在“dbo”架构中。

e.g。 如果它在SomeOtherSchema中,你的电话需要是“SomeOtherSchema.aspnet_CheckSchemaVersion”

答案 5 :(得分:3)

当我启用<roleManager>相信我启用了ASP.NET Identity 2时,我遇到了完全相同的错误。它们不一样! <roleManager>启用了旧版本身份管理的一个版本,它使用与ASP.NET身份2不同的表结构(它不需要&#34;启用&#34;顺便说一下 - 它就在那里)。

如果您故意使用旧的角色管理器并仍然收到错误,您可能会查看默认的localdb而不是数据库,在这种情况下,您可以修改<roleManager>以指向任何你想要的连接字符串:

  <roleManager
      enabled="true"
      cacheRolesInCookie="true"
      defaultProvider="OurSqlRoleProvider"
     >
      <providers>
          <add
             connectionStringName="DefaultConnection"
             applicationName="/"
             name="OurSqlRoleProvider"
             type="System.Web.Security.SqlRoleProvider" />
      </providers>

  </roleManager>

如果您使用的是ASP.NET身份2,请参阅以下文章:
http://johnatten.com/2014/04/20/asp-net-mvc-and-identity-2-0-understanding-the-basics/

答案 6 :(得分:1)

简而言之,您应该使用从托管中分配的sql用户名重新编译aspnet提供者dll。

  • 下载 http://download.microsoft.com/download/a/b/3/ab3c284b-dc9a-473d-b7e3-33bacfcc8e98/ProviderToolkitSamples.msi
  • 从源代码中替换所有 与您的托管对dbo的引用 数据库用户名
  • 编译(您需要Visual Studio)和 放置 ProviderToolkitSampleProviders.dll in Bin文件夹
  • 在你的web.config中替换“type” 每一行的属性 “Microsoft.Samples, ProviderToolkitSampleProviders”
  • 将本地sql server中的所有dbo引用替换为您的托管数据库用户名
  • 导出sql对象创建脚本并在远程数据库上运行它们
  • 将记录从本地sql表aspnet_SchemaVersions复制到远程数据库

另一个选项,更简单的尝试,是用您的托管数据库用户名替换本地sql server数据库中的dbo引用,然后上传并附加您的mdf文件。

希望有所帮助

托马斯

答案 7 :(得分:0)

最简单的方法是添加到 web.config 文件中

  <modules>
          <remove name="RoleManager" />

</modules>