Не удалось найти хранимую процедуру 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 

Может кто-нибудь, пожалуйста, скажите мне, почему возникла эта ошибка (очевидно, что она не может что-то найти ...) и как я могу ее исправить?

Спасибо вам всем

Баел

jay_t55
источник
Возможно ли, что вам нужно дополнительно уточнить сохраненное имя процесса или владелец не dbo
Дэвид
Какую версию SQL Server вы используете?
Наим Сарфраз

Ответы:

165

Вы запускали aspnet_regsql.exeSQL-сервер WinHost.com?

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

Если вы не знаете, где запустить указанную выше команду, вы можете просто запустить исполняемый файл aspnet_regsql.exe.

Чтобы найти этот файл, откройте окно командной строки RUN, нажав Windows Key + r, %windir%\Microsoft.NET\Framework\v4.0.30319введите в него команду ниже и нажмите Enter, затем найдите файл aspnet_regsql.exe. Откроется мастер, с помощью которого вы сможете устранить эту ошибку.

Эта ошибка чаще всего возникает, если вы не включили роли в проекте asp.net mvc при запуске до того, как таблица идентификаторов aspnet будет автоматически создана.

Вам нужно будет убедиться, что вы запустили это, чтобы таблицы и объекты создавались на сервере SQL WinHost.com.

Габриэль Макадамс
источник
17
Если у вас встроенная безопасность, используйте флаг «-E» вместо флагов «-U» (имя пользователя) и «-P» (пароль).
dance2die
СПАСИБО!!! Просто чтобы добавить, вы можете запустить это без аргументов командной строки, чтобы получить графический интерфейс, не совсем как хакхор, но выполняет свою работу :)
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 01
28

Откройте командную строку Visual Studio из папки инструментов Visual Studio в меню «Пуск» и введите aspnet_regsql

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

Нитин S
источник
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
Дэвид Чинг
Благодарность! Это исправило это для меня.
Дэн Чарпстер
3

Проверьте схему, к которой принадлежит хранимая процедура на вашем хосте - возможно, ее нет в схеме "dbo".

например, если он находится в SomeOtherSchema, ваш вызов должен быть "SomeOtherSchema.aspnet_CheckSchemaVersion"

AdaTheDev
источник
1
Спасибо, AdaTheDev. Подскажите, пожалуйста, как бы я изменил вызов на что-то другое? Мол, где в коде это будет ... web.config?
jay_t55
3

У меня была точно такая же ошибка, когда я включил, <roleManager>полагая, что включаю ASP.NET Identity 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.

Надеюсь, это поможет

Томас

Томас
источник
а? какого цвета небо в твоем мире? лолзалот. Чуваку просто нужно подготовить свою базу данных или исправить строку подключения. Нет ответа лучше этого.
Скай Сандерс,
1
Упс, когда он написал «Я выполнил все шаги правильно», я подумал, что он уже пробовал aspnet_regsql.exe и дважды проверил строку подключения. Я знаю, что хостинг-провайдер не разрешает aspnet_regsql.exe, так что мой - рабочее решение для этого случая.
Thomas