Gespeicherte Prozedur 'dbo.aspnet_CheckSchemaVersion' konnte nicht gefunden werden.

86

Ich verwende WinHost.com, um meine Website zu hosten. Das SQL-Datenbank- / Mitgliedschaftssystem funktioniert auf meinem lokalen Computer einwandfrei, aber beim Hochladen auf den Server funktioniert es nicht. Ich habe alle Schritte korrekt ausgeführt. Und ich habe den Support für meinen Service kontaktiert, aber es ist über 2 Wochen her und keine Antwort.

Ich erhalte immer wieder diesen Fehler, wenn ich versuche, mich anzumelden oder einen neuen Benutzer auf meiner Mitgliederseite auf meiner Website zu registrieren.

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 

Kann mir bitte jemand sagen, warum dieser Fehler aufgetreten ist (offensichtlich kann er nichts finden ...) und wie ich ihn beheben kann?

Danke euch allen

Bael

jay_t55
quelle
Ist es möglich, dass Sie den gespeicherten Proc-Namen weiter qualifizieren müssen oder der Besitzer nicht dbo ist
David
Welche Version von SQL Server verwenden Sie?
Naeem Sarfraz

Antworten:

162

aspnet_regsql.exeSind Sie gegen den SQL Server von WinHost.com gelaufen?

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

Wenn Sie nicht wissen, wo Sie den obigen Befehl ausführen sollen, können Sie einfach die ausführbare Datei 'aspnet_regsql.exe' ausführen.

Um diese Datei zu finden, öffnen Sie Ihre RUN-Befehlsbox, indem Sie die Windows-Taste + r drücken und den folgenden Befehl %windir%\Microsoft.NET\Framework\v4.0.30319eingeben. Drücken Sie die Eingabetaste und suchen Sie die Datei 'aspnet_regsql.exe'. Es wird ein Assistent geöffnet, dem Sie folgen können, um diesen Fehler zu beheben.

Dieser Fehler tritt meistens auf, wenn Sie Rollen in Ihrem asp.net mvc-Projekt nicht aktiviert haben. Beim Starten, bevor die Aspnet-Identitätstabelle automatisch erstellt wurde.

Sie müssen sicherstellen, dass Sie dies ausführen, damit die Tabellen und Objekte auf dem SQL Server von WinHost.com erstellt werden.

Gabriel McAdams
quelle
17
Wenn Sie die Sicherheit integriert haben, verwenden Sie das Flag "-E" anstelle der Flags "-U" (Benutzername) und "-P" (Kennwort).
Tanz2die
DANKE!!! Nur um hinzuzufügen, können Sie dies ohne Befehlszeilenargumente ausführen, um eine GUI zu erhalten, nicht ganz so haxxor, aber macht den Job :)
JMK
@gabriel Wie starte ich aspnet_regsql.exe?
Jam Ville
2
@IvorySantos: Wenn Sie nach dem üblichen Pfad für die ausführbare Datei gefragt haben, lautet dieser z. B. "% windir% \ Microsoft.NET \ Framework \ v4.0.30319". Siehe "Finden der richtigen Version von Aspnet_regsql.exe" auf msdn.microsoft.com/en-us/library/ms229862.ASPX
kristinalim
Vielen Dank für Ihre Hilfe @Gabriel, es wird sehr geschätzt.
jay_t55
28

Öffnen Sie die Visual Studio-Eingabeaufforderung im Ordner Visual Studio-Tools im Startmenü und geben Sie ein aspnet_regsql

Folgen Sie dem Assistenten, um die Datenbank für asp.net-Mitgliedschafts- und Rollenanbieter zu registrieren.

Nitin Sawant
quelle
2
Hallo Kumpel, mit aspnet_regsql konnte ich mein Problem beheben und jetzt ist die Frage, was diese --aspnet_regsql - tun?
Lucian Bumb
10

Ich habe das schon mal gesehen. Die von Ihnen verwendete Datenbank verfügt nicht über die erforderlichen Datenbankelemente für die Funktionen Mitgliedschaft, Rollenverwaltung und Profil. Sie haben also mehrere Möglichkeiten:

  1. Kopieren Sie mit SQL Management Studio oder einer ähnlichen Anwendung Tabellen, gespeicherte Prozeduren und Ansichten von Ihrem lokalen SQL Server
  2. Verwenden Sie das Tool aspnet_regsql.exe , um die Skripte gemäß den Anweisungen in diesem Beitrag von neu zu installieren (ich glaube nicht, dass Sie das Tool für eine entfernte Datenbank verwenden können, wenn es gesperrt ist. Sie müssen also die Skripte exportieren und ausführen sie manuell)
Naeem Sarfraz
quelle
5

Ich habe das gleiche Problem - ich kopiere / füge connectionString aus SQL Object managerVisual Studio ein und vergesse zu tippen Initial Catalog=YourDatabaseName.

Maxim Zhukov
quelle
Ich hatte Initial Catalog=masterstattInitial Catalog=YourDatabaseName
David Ching
Vielen Dank! Das hat es für mich behoben.
Dan Csharpster
3

Überprüfen Sie das Schema, zu dem die gespeicherte Prozedur auf Ihrem Host gehört. Möglicherweise befindet es sich nicht im "dbo" -Schema.

Wenn es sich beispielsweise in SomeOtherSchema befindet, muss Ihr Aufruf "SomeOtherSchema.aspnet_CheckSchemaVersion" lauten.

AdaTheDev
quelle
1
Vielen Dank, dass Sie AdaTheDev. Können Sie mir bitte sagen, wie ich den Anruf in etwas anderes ändern würde? Wie wäre es ungefähr im Code ... web.config?
jay_t55
3

Ich hatte genau den gleichen Fehler, als ich aktiviert hatte und <roleManager>glaubte, ich würde ASP.NET Identity 2 aktivieren. Sie sind nicht gleich! Das hat <roleManager>eine alte Version des Identitätsmanagements aktiviert, die eine andere Tabellenstruktur als ASP.NET Identity 2 verwendet (die übrigens nicht "aktiviert" werden muss - sie ist einfach da).

Wenn Sie absichtlich den alten Rollenmanager verwenden und dennoch den Fehler erhalten, wird möglicherweise die Standardeinstellung localdbanstelle Ihrer Datenbank angezeigt. In diesem Fall können Sie die Änderung so ändern <roleManager>, dass sie auf eine beliebige Verbindungszeichenfolge verweist:

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

  </roleManager>

Wenn Sie ASP.NET Identity 2 verwenden möchten, finden Sie hier einen Artikel dazu:
http://johnatten.com/2014/04/20/asp-net-mvc-and-identity-2-0-understanding-the- Grundlagen /

Noelicus
quelle
1

Kurz gesagt, Sie sollten die DLL des Aspnet-Anbieters mit dem SQL-Benutzernamen neu kompilieren, den Sie von Ihrem Hosting erhalten haben.

  • Laden Sie die Datei http://download.microsoft.com/download/a/b/3/ab3c284b-dc9a-473d-b7e3-33bacfcc8e98/ProviderToolkitSamples.msi herunter
  • Ersetzen Sie aus dem Quellcode alle Verweise auf dbo durch Ihren Benutzernamen für die Hosting-Datenbank
  • Kompilieren Sie (Sie benötigen Visual Studio) und platzieren Sie die ProviderToolkitSampleProviders.dll im Ordner Bin
  • Ersetzen Sie in Ihrer web.config das Attribut "type" jeder Zeile durch "Microsoft.Samples., ProviderToolkitSampleProviders".
  • Ersetzen Sie auf Ihrem lokalen SQL-Server alle dbo-Referenzen durch Ihren Benutzernamen für die Hosting-Datenbank
  • Exportieren Sie das SQL-Objekterstellungsskript und führen Sie es in der entfernten Datenbank aus
  • Kopieren Sie die Datensätze aus Ihrer lokalen SQL-Tabelle aspnet_SchemaVersions in die entfernte Datenbank

Eine andere Option, die einfacher zu versuchen ist, besteht darin, die dbo-Referenzen in Ihrer lokalen SQL Server-Datenbank durch den Benutzernamen Ihrer Hosting-Datenbank zu ersetzen und dann Ihre MDF-Datei hochzuladen und anzuhängen.

Ich hoffe es hilft

Thomas

Thomas
quelle
huh? Welche Farbe hat der Himmel in deiner Welt? lolzalot. Dude muss nur seine Datenbank bereitstellen oder seine Verbindungszeichenfolge reparieren. Keine Antwort wäre besser gewesen.
Sky Sanders
1
Hoppla, als er schrieb "Ich habe alle Schritte korrekt ausgeführt", dachte ich, er hat bereits aspnet_regsql.exe ausprobiert und die Verbindungszeichenfolge doppelt überprüft. Ein Hosting-Anbieter, den ich kenne, erlaubt aspnet_regsql.exe nicht, daher ist meins eine funktionierende Lösung für diesen Fall.
Thomas