Не вдалося знайти збережену процедуру '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 

Хтось може сказати мені, чому сталася ця помилка (очевидно, вона не може щось знайти ...), і як я можу це виправити?

Дякую вам всім

Баель


Чи можливо, що вам потрібно додатково визначити збережене ім'я proc, або власник не dbo
Девід

Яку версію SQL Server ви використовуєте?
Naeem Sarfraz

Відповіді:


164

Чи працювали ви aspnet_regsql.exeпроти сервера WinHost.com sql?

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

Якщо ви не знаєте, куди запускати команду вище, ви можете просто запустити виконуваний файл 'aspnet_regsql.exe'.

Для того, щоб знайти цей файл, відкрийте вікно команд RUN, натиснувши клавішу Windows + r і поставте нижче команду в цьому %windir%\Microsoft.NET\Framework\v4.0.30319 і натисніть Enter, а потім знайдіть файл aspnet_regsql.exe. Відкриється майстер, за яким ви зможете усунути цю помилку.

Ця помилка здебільшого виникає, коли ви не ввімкнули ролі у вашому проекті asp.net mvc. При запуску до автоматичного створення таблиці ідентифікаторів aspnet.

Вам потрібно буде переконатися, що ви запустили це, щоб таблиці та об’єкти створювались на SQL-сервері WinHost.com.


17
Якщо у вас інтегрована безпека, використовуйте прапор "-E" замість "-U" (ім'я користувача) та "-P" (пароль).
dance2die

ДЯКУЮ!!! Просто додати, ви можете запустити це без аргументів командного рядка, щоб отримати графічний інтерфейс, не зовсім як 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 tools із меню «Пуск» і введіть aspnet_regsql

і дотримуйтесь майстра, щоб зареєструвати базу даних для членів asp.net та постачальників ролей.


2
Привіт, товаришу, запустивши aspnet_regsql, я зміг виправити свою проблему, і тепер питання полягає в тому, що це --aspnet_regsql - робити?
Lucian Bumb

10

Я це вже бачив. База даних, яку ви використовуєте, не має необхідних елементів бази даних для членства, управління ролями та функцій профілю. Отже, у вас є кілька варіантів:

  1. Копіюйте таблиці, збережені процедури та подання з локального SQL Server за допомогою SQL Management Studio або подібного додатка
  2. Використовуйте інструмент aspnet_regsql.exe, щоб встановити сценарії заново згідно з інструкціями в цій публікації (я не вірю, що ви можете використовувати інструмент проти віддаленої бази даних, якщо вона заблокована. Тож вам доведеться експортувати сценарії та запустити їх вручну)

5

У мене така сама проблема - я копіюю / вставляю connectionString із SQL Object managerVisual Studio і забуваю набирати текст 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 2. Вони не однакові! <roleManager>Включена стара версія управління ідентифікацією , яка використовує іншу структуру таблиці в ASP.NET Ідентичність 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

Коротше кажучи, вам слід перекомпілювати dll провайдера aspnet, використовуючи ім'я користувача sql, призначене вам із вашого хостингу.

  • Завантажте http://download.microsoft.com/download/a/b/3/ab3c284b-dc9a-473d-b7e3-33bacfcc8e98/ProviderToolkitSamples.msi
  • Замініть із вихідного коду всі посилання на dbo на ім’я користувача бази даних хостингу
  • Скомпілюйте (вам потрібна Visual Studio) і розмістіть ProviderToolkitSampleProviders.dll у папці Bin
  • У вашому web.config атрибут "type" кожного рядка замініть на "Microsoft.Samples., ProviderToolkitSampleProviders"
  • Замініть на своєму локальному сервері sql усі посилання на dbo на ім'я користувача бази даних хостингу
  • Експортуйте сценарій створення об’єкта sql та запустіть їх у віддаленій базі даних
  • Скопіюйте записи з вашої локальної таблиці sql aspnet_SchemaVersions у віддалену базу даних

Ще один варіант, який можна спростити, - замінити посилання dbo у вашій локальній базі даних SQL-сервера на ім’я користувача бази даних хостингу, а потім завантажити та прикріпити ваш файл mdf.

Сподіваюся, це допоможе

Томас


так? якого кольору небо у вашому світі? лолзалот. Чувакові просто потрібно надати свою базу даних або виправити рядок підключення. Жодна відповідь не була б кращою за цю.
Sky Sanders

1
На жаль, коли він написав "Я правильно виконав усі кроки", я думав, він уже спробував aspnet_regsql.exe і перевірив рядок з'єднання. Я знаю, що хостинг-провайдер не дозволяє aspnet_regsql.exe, тому мій є робочим рішенням для цього випадку.
Томас
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.