Không thể tìm thấy thủ tục được lưu trữ 'dbo.aspnet_CheckSchemaVersion'


87

Tôi đang sử dụng WinHost.com để lưu trữ trang web của mình. Cơ sở dữ liệu SQL / hệ thống thành viên hoạt động hoàn hảo trên máy tính cục bộ của tôi, nhưng khi tải lên máy chủ, nó không hoạt động. Tôi đã làm theo tất cả các bước một cách chính xác. Và tôi đã liên hệ với bộ phận hỗ trợ cho dịch vụ của mình nhưng đã hơn 2 tuần mà không có hồi âm.

Tôi tiếp tục gặp lỗi này khi cố gắng đăng nhập hoặc đăng ký người dùng mới trên trang thành viên trên trang web của mình.

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 

Ai đó có thể vui lòng cho tôi biết tại sao lỗi này lại xảy ra (rõ ràng là nó không thể tìm thấy thứ gì đó ...), và làm thế nào tôi có thể sửa nó?

Cảm ơn tất cả

Bael


Có thể rằng bạn cần phải hội đủ điều kiện hơn nữa tên proc lưu trữ hoặc chủ sở hữu không phải là dbo
David

Bạn đang sử dụng phiên bản SQL Server nào?
Naeem Sarfraz

Câu trả lời:


164

Bạn có chạy aspnet_regsql.exetrên máy chủ sql của WinHost.com không?

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

Nếu bạn không biết phải chạy lệnh trên ở đâu thì bạn có thể chỉ cần chạy tệp thực thi 'aspnet_regsql.exe'.

Để định vị tệp này, hãy mở Hộp lệnh RUN của bạn bằng cách nhấn phím Windows + r và đặt lệnh bên dưới vào đó %windir%\Microsoft.NET\Framework\v4.0.30319và nhấn Enter rồi tìm tệp 'aspnet_regsql.exe'. Nó sẽ mở một trình hướng dẫn mà bạn có thể làm theo để giải quyết lỗi này.

Lỗi này chủ yếu xảy ra khi bạn không bật Vai trò trong dự án mvc asp.net của mình Lúc bắt đầu trước khi bảng nhận dạng aspnet tự động được tạo.

Bạn sẽ cần đảm bảo rằng bạn chạy điều này để các bảng và đối tượng được tạo trên máy chủ SQL của WinHost.com.


17
Nếu bạn đã tích hợp bảo mật, hãy sử dụng cờ "-E" thay vì cờ "-U" (tên người dùng) và "-P" (mật khẩu).
dance2die

CẢM ƠN BẠN!!! Chỉ cần thêm, bạn có thể chạy này không có args dòng lệnh để có được một giao diện đồ họa, không phải là khá haxxor nhưng không được công việc :)
JMK

@gabriel Làm cách nào để chạy aspnet_regsql.exe?
Jam Ville

2
@IvorySantos: Nếu bạn hỏi về đường dẫn thông thường cho tệp thực thi, đó là ví dụ: "% windir% \ Microsoft.NET \ Framework \ v4.0.30319". Xem "Tìm phiên bản chính xác của Aspnet_regsql.exe" trên msdn.microsoft.com/en-us/library/ms229862.ASPX
kristinalim

Cảm ơn sự giúp đỡ của bạn @Gabriel, nó rất được đánh giá cao.
jay_t55

28

Mở dấu nhắc lệnh Visual studio từ thư mục công cụ Visual studio từ menu bắt đầu và nhập aspnet_regsql

và làm theo trình hướng dẫn để đăng ký cơ sở dữ liệu cho các nhà cung cấp vai trò và thành viên asp.net.


2
Xin chào người bạn đời, đang chạy aspnet_regsql Tôi đã có thể khắc phục sự cố của mình và bây giờ câu hỏi là cái này --aspnet_regsql - Làm gì?
Lucian Bumb

10

Tôi đã thấy điều này trước đây. Cơ sở dữ liệu bạn đang sử dụng không có các yếu tố cơ sở dữ liệu bắt buộc cho các tính năng thành viên, quản lý vai trò và hồ sơ. Vì vậy, bạn có một số lựa chọn:

  1. Sao chép qua các bảng, các thủ tục và dạng xem được lưu trữ từ SQL Server cục bộ của bạn bằng SQL Management Studio hoặc một ứng dụng tương tự
  2. Sử dụng công cụ aspnet_regsql.exe để cài đặt lại các tập lệnh theo hướng dẫn trong bài đăng này (Tôi không tin rằng bạn có thể sử dụng công cụ này với cơ sở dữ liệu từ xa nếu nó bị khóa. Vì vậy, bạn sẽ phải xuất các tập lệnh và chạy chúng theo cách thủ công)

5

Tôi gặp vấn đề tương tự - tôi sao chép / dán kết nối Chuỗi từ SQL Object managertrong Visual Studio và quên nhập Initial Catalog=YourDatabaseName.


Tôi đã Initial Catalog=masterthayInitial Catalog=YourDatabaseName
David Ching

Cảm ơn! Điều đó đã sửa nó cho tôi.
Dan Csharpster

3

Kiểm tra lược đồ mà thủ tục được lưu trữ thuộc về máy chủ của bạn - có thể là nó không có trong lược đồ "dbo".

ví dụ: nếu nó nằm trong SomeOtherSchema, cuộc gọi của bạn sẽ cần phải là "SomeOtherSchema.aspnet_CheckSchemaVersion"


1
Cảm ơn AdaTheDev. Bạn có thể vui lòng cho tôi biết tôi sẽ làm thế nào khi thay đổi cuộc gọi sang một thứ khác không? Giống như, khoảng nào trong mã sẽ là ... web.config?
jay_t55,

3

Tôi đã gặp phải lỗi tương tự khi bật <roleManager>tin rằng tôi đang bật ASP.NET Identity 2. Chúng không giống nhau! Đã <roleManager>kích hoạt phiên bản quản lý danh tính cũ sử dụng cấu trúc bảng khác với ASP.NET Identity 2 (nhân tiện không cần "bật" - nó chỉ ở đó).

Nếu bạn đang cố tình sử dụng trình quản lý vai trò cũ và vẫn gặp lỗi, bạn có thể đang xem mặc định localdbthay vì cơ sở dữ liệu của mình, trong trường hợp đó, bạn có thể sửa đổi <roleManager>để trỏ đến bất kỳ chuỗi kết nối nào bạn muốn:

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

  </roleManager>

Nếu bạn đang sử dụng ASP.NET Identity 2, thì đây là một bài viết về nó:
http://johnatten.com/2014/04/20/asp-net-mvc-and-identity-2-0-und hieu-the- những điều cơ bản /


1

Tóm lại, bạn nên biên dịch lại dll nhà cung cấp aspnet bằng tên người dùng sql mà bạn đã được chỉ định từ máy chủ của mình.

  • Tải xuống http://download.microsoft.com/download/a/b/3/ab3c284b-dc9a-473d-b7e3-33bacfcc8e98/ProviderToolkitSamples.msi
  • Thay thế từ mã nguồn tất cả các tham chiếu đến dbo bằng tên người dùng cơ sở dữ liệu lưu trữ của bạn
  • Biên dịch (bạn cần Visual Studio) và đặt ProviderToolkitSampleProviders.dll trong thư mục Bin
  • Trong web.config của bạn, hãy thay thế thuộc tính "type" của mọi dòng bằng "Microsoft.Samples., ProviderToolkitSampleProviders"
  • Thay thế trong máy chủ sql cục bộ của bạn tất cả các tham chiếu dbo bằng tên người dùng cơ sở dữ liệu lưu trữ của bạn
  • Xuất tập lệnh tạo đối tượng sql và chạy chúng trên cơ sở dữ liệu từ xa
  • Sao chép các bản ghi từ bảng sql cục bộ của bạn aspnet_SchemaVersions vào cơ sở dữ liệu từ xa

Một tùy chọn khác, đơn giản hơn để thử, là thay thế các tham chiếu dbo trong cơ sở dữ liệu máy chủ sql cục bộ của bạn bằng tên người dùng cơ sở dữ liệu lưu trữ của bạn, sau đó tải lên và đính kèm tệp mdf của bạn.

Hy vọng nó giúp

Thomas


Huh? Màu bầu trời trong thế giới của bạn màu gì? lolzalot. Dude chỉ cần cung cấp cơ sở dữ liệu của mình hoặc sửa chuỗi kết nối của mình. Không có câu trả lời sẽ tốt hơn điều này.
Sky Sanders

1
Rất tiếc khi anh ấy viết "Tôi đã thực hiện đúng tất cả các bước" Tôi nghĩ anh ấy đã thử aspnet_regsql.exe và kiểm tra kỹ chuỗi kết nối. Một nhà cung cấp dịch vụ lưu trữ mà tôi biết không cho phép aspnet_regsql.exe nên giải pháp của tôi là một giải pháp hiệu quả cho trường hợp đó.
Thomas
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.