Não foi possível encontrar o procedimento armazenado 'dbo.aspnet_CheckSchemaVersion'

87

Estou usando o WinHost.com para hospedar meu site. O banco de dados SQL / sistema de associação funciona perfeitamente no meu computador local, mas quando carregado para o servidor, ele não funciona. Segui todos os passos corretamente. E entrei em contato com o suporte para o meu serviço, mas já se passaram mais de 2 semanas e nenhuma resposta.

Continuo recebendo esse erro quando tento fazer o login ou registrar um novo usuário na página de membro do meu site.

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 

Alguém pode me dizer por que esse erro ocorreu (obviamente, ele não pode encontrar algo ...), e como posso corrigi-lo?

Obrigado a todos

Bael

Jay_t55
fonte
É possível que você precise qualificar ainda mais o nome do procedimento armazenado ou o proprietário não é dbo
David
Qual versão do SQL Server você está usando?
Naeem Sarfraz

Respostas:

165

Você aspnet_regsql.exeexecutou no servidor sql do WinHost.com?

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

Se você não sabe onde executar o comando acima, pode simplesmente executar o arquivo executável 'aspnet_regsql.exe'.

Para localizar este arquivo, abra sua caixa de comando RUN pressionando a tecla Windows + r e coloque o comando abaixo nela %windir%\Microsoft.NET\Framework\v4.0.30319e pressione Enter e, em seguida, encontre o arquivo 'aspnet_regsql.exe'. Ele abrirá um assistente que você pode seguir para resolver esse erro.

Este erro ocorre principalmente quando você não habilitou Funções em seu projeto asp.net mvc No início, antes da criação automática da tabela de identidade aspnet.

Você precisará certificar-se de executar isso para que as tabelas e objetos sejam criados no servidor SQL do WinHost.com.

Gabriel McAdams
fonte
17
Se você tiver segurança integrada, use o sinalizador "-E" em vez dos sinalizadores "-U" (nome de usuário) e "-P" (senha).
dance2die
OBRIGADO!!! Apenas para adicionar, você pode executar isso sem argumentos de linha de comando para obter uma GUI, não tão haxxor, mas faz o trabalho :)
JMK
@gabriel Como executar aspnet_regsql.exe?
Jam Ville
2
@IvorySantos: Se você estava perguntando sobre o caminho usual para o executável, é por exemplo "% windir% \ Microsoft.NET \ Framework \ v4.0.30319". Consulte "Encontrando a versão correta do Aspnet_regsql.exe" em msdn.microsoft.com/en-us/library/ms229862.ASPX
kristinalim
Obrigado pela ajuda @Gabriel, é muito apreciada.
jay_t55 01 de
28

Abra o prompt de comando do Visual Studio na pasta de ferramentas do Visual studio no menu iniciar e digite aspnet_regsql

e siga o assistente para registrar o banco de dados para membros do asp.net e provedores de função.

Nitin S
fonte
2
Olá amigo, ao executar o aspnet_regsql, consegui consertar meu problema e agora a pergunta é o que isso --aspnet_regsql - faz?
Lucian Bumb
10

Eu já vi isso antes. O banco de dados que você está usando não possui os elementos de banco de dados necessários para os recursos de associação, gerenciamento de funções e perfil. Então, você tem algumas opções:

  1. Copie nas tabelas, procedimentos armazenados e visualizações do seu SQL Server local usando o SQL Management Studio ou um aplicativo semelhante
  2. Use a ferramenta aspnet_regsql.exe para instalar os scripts de novo de acordo com as instruções deste post (não acredito que você possa usar a ferramenta em um banco de dados remoto se estiver bloqueado. Portanto, você terá que exportar os scripts e executar eles manualmente)
Naeem Sarfraz
fonte
5

Tenho o mesmo problema - copio / colo connectionString do SQL Object managerVisual Studio e esqueço de digitar Initial Catalog=YourDatabaseName.

Maxim Zhukov
fonte
Eu tinha em Initial Catalog=mastervez deInitial Catalog=YourDatabaseName
David Ching
Obrigado! Isso resolveu para mim.
Dan Csharpster
3

Verifique o esquema ao qual o procedimento armazenado pertence em seu host - pode ser que ele não esteja no esquema "dbo".

por exemplo, se estiver em SomeOtherSchema, sua chamada deve ser "SomeOtherSchema.aspnet_CheckSchemaVersion"

AdaTheDev
fonte
1
Obrigado AdaTheDev. Você pode me dizer como eu faria para mudar a chamada para outra coisa? Tipo, onde mais no código estaria ... web.config?
Jay_t55
3

Eu tive exatamente o mesmo erro quando habilitei <roleManager>acreditar que estava habilitando o ASP.NET Identity 2. Eles não são os mesmos! O <roleManager>habilitou uma versão antiga de gerenciamento de identidade que usa uma estrutura de tabela diferente do ASP.NET Identity 2 (que não precisa ser "habilitado" - está apenas lá).

Se você estiver usando intencionalmente o gerenciador de funções antigo e ainda receber o erro, pode estar olhando para o padrão em localdbvez do banco de dados, caso em que pode modificar <roleManager>para apontar para qualquer string de conexão que desejar:

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

  </roleManager>

Se você deseja usar o ASP.NET Identity 2, aqui está um artigo sobre ele:
http://johnatten.com/2014/04/20/asp-net-mvc-and-identity-2-0-understanding-the- Fundamentos/

noelicus
fonte
1

Resumindo, você deve recompilar a dll do provedor aspnet usando o nome de usuário sql que lhe foi atribuído em sua hospedagem.

  • Baixe o http://download.microsoft.com/download/a/b/3/ab3c284b-dc9a-473d-b7e3-33bacfcc8e98/ProviderToolkitSamples.msi
  • Substitua do código-fonte todas as referências a dbo pelo nome de usuário do banco de dados de hospedagem
  • Compile (você precisa do Visual Studio) e coloque ProviderToolkitSampleProviders.dll na pasta Bin
  • Em seu web.config, substitua o atributo "type" de cada linha por “Microsoft.Samples., ProviderToolkitSampleProviders”
  • Substitua em seu servidor sql local todas as referências dbo pelo nome de usuário do banco de dados de hospedagem
  • Exporte o script de criação de objeto sql e execute-o no banco de dados remoto
  • Copie os registros de sua tabela sql local aspnet_SchemaVersions para o banco de dados remoto

Outra opção, mais simples de tentar com o pheraps, é substituir as referências dbo no banco de dados do servidor sql local pelo nome de usuário do banco de dados de hospedagem e, em seguida, fazer upload e anexar o arquivo mdf.

Espero que ajude

Thomas

Thomas
fonte
Hã? qual é a cor do céu no seu mundo? lolzalot. O cara só precisa provisionar seu banco de dados ou consertar sua string de conexão. Nenhuma resposta teria sido melhor do que esta.
Sky Sanders de
1
Opa, quando ele escreveu "Segui todas as etapas corretamente", pensei que ele já tivesse tentado aspnet_regsql.exe e verificado novamente a string de conexão. Um provedor de hospedagem que conheço não permite aspnet_regsql.exe, então o meu é uma solução útil para esse caso.
Thomas