저장 프로 시저 '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 

누군가이 오류가 발생한 이유 (분명히 뭔가를 찾을 수 없습니다 ...), 그리고 어떻게 해결할 수 있는지 알려주세요.

다들 감사 해요

Bael


저장된 proc 이름을 추가로 한정해야하거나 소유자가 dbo가 아닐 수
David

어떤 버전의 SQL Server를 사용하고 있습니까?
Naeem Sarfraz

답변:


165

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'파일을 찾으십시오. 이 오류를 해결하기 위해 따를 수있는 마법사가 열립니다.

이 오류는 주로 aspnet ID 테이블이 자동으로 생성되기 전에 asp.net mvc 프로젝트에서 역할을 활성화하지 않았을 때 발생합니다.

테이블과 개체가 WinHost.com의 SQL 서버에 생성되도록이 작업을 실행해야합니다.


17
통합 보안이있는 경우 "-U"(사용자 이름) 및 "-P"(암호) 플래그 대신 "-E"플래그를 사용하십시오.
dance2die

감사합니다!!! 추가하기 위해 명령 줄 인수없이이를 실행하여 GUI를 얻을 수 있습니다. haxxor는 아니지만 작업을 수행합니다. :)
JMK

@gabriel aspnet_regsql.exe를 실행하는 방법?
Jam Ville

2
@IvorySantos : 실행 파일의 일반적인 경로를 묻는다면 "% windir % \ Microsoft.NET \ Framework \ v4.0.30319"입니다. 의 "Aspnet_regsql.exe의 올바른 버전 찾기"를 참조 msdn.microsoft.com/en-us/library/ms229862.ASPX
kristinalim

@Gabriel의 도움에 감사드립니다.
jay_t55

28

시작 메뉴의 Visual Studio 도구 폴더에서 Visual Studio 명령 프롬프트를 열고 다음을 입력합니다. aspnet_regsql

마법사를 따라 asp.net 멤버십 및 역할 공급자에 대한 데이터베이스를 등록합니다.


2
안녕하세요, aspnet_regsql을 실행하여 문제를 해결할 수 있었는데 이제 질문은이 --aspnet_regsql-무엇입니까?
Lucian Bumb

10

나는 이것을 전에 본 적이 있습니다. 사용중인 데이터베이스에 멤버십, 역할 관리 및 프로필 기능에 필요한 데이터베이스 요소가 없습니다. 따라서 몇 가지 옵션이 있습니다.

  1. SQL Management Studio 또는 유사한 응용 프로그램을 사용하여 로컬 SQL Server에서 테이블, 저장 프로 시저 및 뷰를 복사합니다.
  2. 게시물 의 지침에 따라 aspnet_regsql.exe 도구 를 사용하여 새로 스크립트를 설치합니다 (잠긴 경우 원격 데이터베이스에 대해 도구를 사용할 수 없다고 생각합니다. 따라서 스크립트를 내보내고 실행해야합니다. 수동으로)

5

동일한 문제가 있습니다 SQL Object manager. Visual Studio에서 connectionString을 복사 / 붙여 넣기 하고 Initial Catalog=YourDatabaseName.


나는 한 Initial Catalog=master대신Initial Catalog=YourDatabaseName
데이비드 칭

감사! 그것은 나를 위해 그것을 고쳤습니다.
Dan Csharpster

3

저장 프로 시저가 호스트에서 속한 스키마를 확인하십시오. "dbo"스키마에 없을 수도 있습니다.

예를 들어 SomeOtherSchema 내에있는 경우 호출은 "SomeOtherSchema.aspnet_CheckSchemaVersion"이어야합니다.


1
AdaTheDev 감사합니다. 통화를 다른 것으로 변경하는 방법을 알려주시겠습니까? 예를 들어, 코드의 어디에 ... web.config입니까?
jay_t55

3

내가 <roleManager>ASP.NET Identity 2를 활성화 한다고 믿었을 때 똑같은 오류가 발생했습니다 . 그들은 동일하지 않습니다! <roleManager>(- 그냥 거기 방법으로 "사용"을 필요로하지 않는다) ASP.NET 신원 2에 다른 테이블 구조를 사용하는 ID 관리의 이전 버전을 사용 가능.

의도적으로 이전 역할 관리자를 사용하고 있는데도 여전히 오류가 발생 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 필요)하고 Bin 폴더에 ProviderToolkitSampleProviders.dll을 배치합니다.
  • web.config에서 모든 줄의 "type"속성을 "Microsoft.Samples., ProviderToolkitSampleProviders"로 바꿉니다.
  • 로컬 SQL 서버에서 모든 dbo 참조를 호스팅 데이터베이스 사용자 이름으로 바꿉니다.
  • SQL 개체 생성 스크립트를 내보내고 원격 데이터베이스에서 실행
  • 로컬 SQL 테이블 aspnet_SchemaVersions에서 원격 데이터베이스로 레코드를 복사합니다.

시도하기 더 쉬운 pheraps의 또 다른 옵션은 로컬 SQL Server 데이터베이스의 dbo 참조를 호스팅 데이터베이스 사용자 이름으로 바꾼 다음 mdf 파일을 업로드하고 첨부하는 것입니다.

도움이되기를 바랍니다.

도마


응? 당신의 세계의 하늘은 어떤 색입니까? lolzalot. Dude는 데이터베이스를 프로비저닝하거나 연결 문자열을 수정하기 만하면됩니다. 이것보다 더 좋은 대답은 없었을 것입니다.
Sky Sanders

1
죄송합니다. "모든 단계를 올바르게 수행했습니다"라고 썼을 때 그는 이미 aspnet_regsql.exe를 시도하고 연결 문자열을 다시 확인했다고 생각했습니다. 내가 아는 호스팅 제공 업체는 aspnet_regsql.exe를 허용하지 않으므로 내 것이 해당 사례에 대한 작업 솔루션입니다.
Thomas
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.