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


87

我正在使用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 

有人可以告诉我为什么会发生此错误(很明显找不到)吗?如何解决?

谢谢你们

拜尔


有没有可能是你需要进一步限定存储过程的名称或所有者不是DBO
大卫·

您正在使用哪个版本的SQL Server?
Naeem Sarfraz 2010年

Answers:


164

您是否在aspnet_regsql.exeWinHost.com的sql服务器上运行?

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项目中启用角色时,通常会发生此错误。

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


17
如果您具有集成安全性,请使用“ -E”标志代替“ -U”(用户名)和“ -P”(密码)标志。
dance2die 2012年

谢谢!!!只需添加,您就可以在不使用命令行参数的情况下运行它来获取GUI,而不是haxxor,但可以完成此工作:)
JMK

@gabriel如何运行aspnet_regsql.exe?
Jam Ville

2
@IvorySantos:如果您询问可执行文件的通常路径,则为“%windir%\ Microsoft.NET \ Framework \ v4.0.30319”。请参阅msdn.microsoft.com/en-us/library/ms229862.ASPX
kristinalim 2014年

感谢@Gabriel的帮助,非常感谢。
jay_t55'9

28

从开始菜单的Visual Studio工具文件夹中打开Visual Studio命令提示符,然后键入 aspnet_regsql

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


2
嗨,队友,运行aspnet_regsql我能够解决我的问题,现在的问题是--aspnet_regsql-是什么?
Lucian Bumb 2015年

10

我以前看过 您正在使用的数据库没有成员资格,角色管理和配置文件功能所需的数据库元素。因此,您有两种选择:

  1. 使用SQL Management Studio或类似应用程序从本地SQL Server复制表,存储过程和视图
  2. 使用aspnet_regsql.exe的工具在此安装脚本从重新按照指令 (我不相信你可以使用该工具对远程数据库,如果它锁定了。所以你必须导出脚本并运行他们手动)


3

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

例如,如果它在SomeOtherSchema中,则您的调用将需要为“ SomeOtherSchema.aspnet_CheckSchemaVersion”


1
谢谢AdaTheDev。您能告诉我如何将通话更改为其他电话吗?就像,代码中的abouts将会是... web.config?
jay_t55 '01

3

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

如果您有意使用旧的角色管理器而仍然出现错误,则可能正在查找默认值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 Identity 2,请在其上找到以下文章:http :
//johnatten.com/2014/04/20/asp-net-mvc-and-identity-2-0-understanding-the-基本/


1

简而言之,您应该使用从主机分配的sql用户名重新编译aspnet提供程序dll。

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

另一个更容易尝试的方法是用托管数据库用户名替换本地sql服务器数据库中的dbo引用,然后上传并附加mdf文件。

希望能帮助到你

汤玛士


?? 您的天空是什么颜色?哈哈 Dude只需要提供他的数据库或修复他的连接字符串。没有答案会比这更好。
Sky Sanders

1
糟糕,当他写“我正确地遵循了所有步骤”时,我认为他已经尝试过aspnet_regsql.exe并仔细检查了连接字符串。我知道一个托管服务提供商不允许aspnet_regsql.exe,因此我的主机是这种情况下的可行解决方案。
汤玛斯(Thomas)2010年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.