Impossibile trovare la stored procedure "dbo.aspnet_CheckSchemaVersion"


87

Sto usando WinHost.com per ospitare il mio sito. Il database SQL / sistema di appartenenza funziona perfettamente sul mio computer locale, ma quando viene caricato sul server non funziona. Ho seguito correttamente tutti i passaggi. E ho contattato l'assistenza per il mio servizio, ma sono trascorse più di 2 settimane e nessuna risposta.

Continuo a ricevere questo errore quando provo ad accedere o registrare un nuovo utente nella mia pagina di iscrizione sul mio sito.

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 

Qualcuno può dirmi perché si è verificato questo errore (ovviamente non riesce a trovare qualcosa ...) e come posso risolverlo?

Grazie a tutti

Bael


È possibile che sia necessario qualificare ulteriormente il nome del proc memorizzato o il proprietario non è dbo
David

Quale versione di SQL Server stai utilizzando?
Naeem Sarfraz

Risposte:


164

Hai eseguito aspnet_regsql.execontro il server sql di WinHost.com?

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

Se non sai dove eseguire il comando precedente, puoi semplicemente eseguire il file eseguibile "aspnet_regsql.exe".

Per individuare questo file, apri la tua casella di comando RUN premendo il tasto Windows + r e inserisci il comando sottostante %windir%\Microsoft.NET\Framework\v4.0.30319e premi invio, quindi trova il file 'aspnet_regsql.exe'. Si aprirà una procedura guidata che puoi seguire per risolvere questo errore.

Questo errore si verifica principalmente quando non hai abilitato i ruoli nel tuo progetto asp.net mvc All'avvio prima della creazione automatica della tabella delle identità di aspnet.

Dovrai assicurarti di eseguirlo in modo che le tabelle e gli oggetti vengano creati sul server SQL di WinHost.com.


17
Se hai la sicurezza integrata, usa il flag "-E" invece dei flag "-U" (nome utente) e "-P" (password).
dance2die

GRAZIE!!! Solo per aggiungere, puoi eseguirlo senza argomenti da riga di comando per ottenere una GUI, non proprio come haxxor ma fa il lavoro :)
JMK

@gabriel Come eseguire aspnet_regsql.exe?
Jam Ville

2
@IvorySantos: Se stavi chiedendo il solito percorso per l'eseguibile, è ad esempio "% windir% \ Microsoft.NET \ Framework \ v4.0.30319". Vedere "Trovare la versione corretta di Aspnet_regsql.exe" su msdn.microsoft.com/en-us/library/ms229862.ASPX
kristinalim

Grazie per il tuo aiuto @Gabriel, è molto apprezzato.
jay_t55

28

Apri il prompt dei comandi di Visual Studio dalla cartella Strumenti di Visual Studio dal menu Start e digita aspnet_regsql

e seguire la procedura guidata per registrare il database per l'appartenenza ad asp.net e per i provider di ruoli.


2
Ciao amico, eseguendo aspnet_regsql sono stato in grado di risolvere il mio problema e ora la domanda è: cosa fa questo --aspnet_regsql?
Lucian Bumb

10

L'ho già visto prima. Il database in uso non dispone degli elementi di database richiesti per l'appartenenza, la gestione dei ruoli e le funzionalità del profilo. Quindi hai un paio di opzioni:

  1. Copiare tabelle, stored procedure e viste dal server SQL locale utilizzando SQL Management Studio o un'applicazione simile
  2. Usa lo strumento aspnet_regsql.exe per installare di nuovo gli script come da istruzioni in questo post (non credo che tu possa usare lo strumento su un database remoto se è bloccato. Quindi dovrai esportare gli script ed eseguire loro manualmente)

5

Ho lo stesso problema: copio / incollo connectionString da SQL Object managerVisual Studio e dimentico di digitare Initial Catalog=YourDatabaseName.


Ho avuto Initial Catalog=masterinvece diInitial Catalog=YourDatabaseName
David Ching

Grazie! Questo ha risolto il problema per me.
Dan Csharpster

3

Controlla lo schema a cui appartiene la stored procedure sul tuo host: potrebbe essere che non sia nello schema "dbo".

ad esempio, se è all'interno di SomeOtherSchema, la chiamata dovrebbe essere "SomeOtherSchema.aspnet_CheckSchemaVersion"


1
Grazie AdaTheDev. Puoi dirmi come farei per cambiare la chiamata in qualcos'altro? Ad esempio, dove si trova nel codice sarebbe ... web.config?
jay_t55

3

Ho avuto lo stesso identico errore quando ho abilitato <roleManager>credendo di abilitare ASP.NET Identity 2. Non sono la stessa cosa! È stata <roleManager>abilitata una vecchia versione della gestione delle identità che utilizza una struttura di tabelle diversa da ASP.NET Identity 2 (che non ha bisogno di "abilitazione" tra l'altro, è semplicemente lì).

Se stai intenzionalmente utilizzando il vecchio manager dei ruoli e ricevi ancora l'errore, potresti guardare il valore predefinito localdbinvece del tuo database, nel qual caso puoi modificare <roleManager>in modo che punti a qualsiasi stringa di connessione che desideri:

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

  </roleManager>

Se stai utilizzando ASP.NET Identity 2, ecco un articolo su di esso:
http://johnatten.com/2014/04/20/asp-net-mvc-and-identity-2-0-understanding-the- basi /


1

In breve, dovresti ricompilare la dll del provider aspnet utilizzando il nome utente sql che ti è stato assegnato dal tuo hosting.

  • Scarica il http://download.microsoft.com/download/a/b/3/ab3c284b-dc9a-473d-b7e3-33bacfcc8e98/ProviderToolkitSamples.msi
  • Sostituisci dal codice sorgente tutti i riferimenti a dbo con il nome utente del tuo database di hosting
  • Compilare (è necessario Visual Studio) e posizionare ProviderToolkitSampleProviders.dll nella cartella Bin
  • Nel tuo web.config, sostituisci l'attributo "type" di ogni riga con "Microsoft.Samples., ProviderToolkitSampleProviders"
  • Sostituisci nel tuo server sql locale tutti i riferimenti dbo con il nome utente del tuo database di hosting
  • Esportare lo script di creazione dell'oggetto sql ed eseguirlo sul database remoto
  • Copiare i record dalla tabella SQL locale aspnet_SchemaVersions al database remoto

Un'altra opzione, che è più semplice da provare, è sostituire i riferimenti dbo nel database del server sql locale con il nome utente del database di hosting, quindi caricare e allegare il file mdf.

Spero che sia d'aiuto

Tommaso


eh? Di che colore è il cielo nel tuo mondo? lolzalot. Amico deve solo eseguire il provisioning del suo database o correggere la sua stringa di connessione. Nessuna risposta sarebbe stata migliore di questa.
Sky Sanders

1
Ops quando ha scritto "Ho seguito correttamente tutti i passaggi" ho pensato che avesse già provato aspnet_regsql.exe e ha ricontrollato la stringa di connessione. Un provider di hosting che conosco non consente aspnet_regsql.exe, quindi la mia è una soluzione funzionante per quel caso.
Thomas,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.