Nie można znaleźć procedury składowanej „dbo.aspnet_CheckSchemaVersion”

87

Używam WinHost.com do hostowania mojej witryny. SQL Database / system członkostwa działa doskonale na moim komputerze lokalnym, ale po przesłaniu na serwer nie działa. Wykonałem wszystkie kroki poprawnie. Skontaktowałem się z pomocą techniczną dotyczącą mojej usługi, ale minęły już ponad 2 tygodnie i nie otrzymałem odpowiedzi.

Ten błąd pojawia się, gdy próbuję się zalogować lub zarejestrować nowego użytkownika na mojej stronie członkostwa w mojej witrynie.

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 

Czy ktoś może mi powiedzieć, dlaczego wystąpił ten błąd (oczywiście nie może czegoś znaleźć ...) i jak mogę to naprawić?

Dziękuję wam wszystkim

Bael

jay_t55
źródło
Czy to możliwe, że musisz dalej kwalifikować przechowywaną nazwę proc lub właściciel nie jest dbo
David
Jakiej wersji SQL Server używasz?
Naeem Sarfraz,

Odpowiedzi:

165

Czy korzystałeś aspnet_regsql.exez serwera sql WinHost.com?

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

Jeśli nie wiesz, gdzie uruchomić powyższe polecenie, możesz po prostu uruchomić plik wykonywalny „aspnet_regsql.exe”.

Aby zlokalizować ten plik, otwórz okno poleceń RUN, naciskając klawisz Windows + r, wpisz w nim poniższe polecenie %windir%\Microsoft.NET\Framework\v4.0.30319i naciśnij klawisz Enter, a następnie znajdź plik „aspnet_regsql.exe”. Otworzy się kreator, którego możesz użyć, aby rozwiązać ten błąd.

Ten błąd występuje głównie wtedy, gdy nie włączono ról w projekcie mvc asp.net podczas uruchamiania przed automatycznym utworzeniem tabeli tożsamości aspnet.

Będziesz musiał upewnić się, że uruchomiłeś to, aby tabele i obiekty zostały utworzone na serwerze SQL WinHost.com.

Gabriel McAdams
źródło
17
Jeśli masz zintegrowane zabezpieczenia, użyj flagi „-E” zamiast flag „-U” (nazwa użytkownika) i „-P” (hasło).
dance2die
DZIĘKUJĘ CI!!! Wystarczy dodać, że możesz to uruchomić bez argumentów wiersza poleceń, aby uzyskać GUI, nie tak jak haxxor, ale spełnia swoje zadanie :)
JMK
@gabriel Jak uruchomić aspnet_regsql.exe?
Jam Ville
2
@IvorySantos: Jeśli pytałeś o zwykłą ścieżkę do pliku wykonywalnego, jest to np. „% Windir% \ Microsoft.NET \ Framework \ v4.0.30319”. Zobacz „Znajdowanie właściwej wersji pliku Aspnet_regsql.exe” na msdn.microsoft.com/en-us/library/ms229862.ASPX
kristinalim,
Dzięki za pomoc @Gabriel, jest to bardzo cenne.
jay_t55
28

Otwórz wiersz polecenia programu Visual Studio z folderu narzędzi programu Visual Studio z menu Start i wpisz aspnet_regsql

i postępuj zgodnie z instrukcjami kreatora, aby zarejestrować bazę danych dla członkostwa asp.net i dostawców ról.

Nitin S
źródło
2
Cześć kolego, uruchamiam aspnet_regsql Udało mi się naprawić mój problem, a teraz pytanie brzmi, co to --aspnet_regsql - zrobić?
Lucian Bumb
10

Widziałem to wcześniej. Używana baza danych nie ma wymaganych elementów bazy danych dotyczących członkostwa, zarządzania rolami i funkcji profilu. Masz więc kilka opcji:

  1. Skopiuj między tabelami, procedurami składowanymi i widokami z lokalnego serwera SQL przy użyciu programu SQL Management Studio lub podobnej aplikacji
  2. Użyj narzędzia aspnet_regsql.exe, aby zainstalować skrypty od nowa, zgodnie z instrukcjami zawartymi w tym poście (nie sądzę, abyś mógł użyć tego narzędzia przeciwko zdalnej bazie danych, jeśli jest zablokowana. Musisz więc wyeksportować skrypty i uruchomić je ręcznie)
Naeem Sarfraz
źródło
5

Mam ten sam problem - kopiuję / wklejam ciąg connectionString z programu SQL Object managerVisual Studio i zapominam o wpisaniu Initial Catalog=YourDatabaseName.

Maxim Zhukov
źródło
Miałem Initial Catalog=masterzamiastInitial Catalog=YourDatabaseName
David Ching
Dzięki! To naprawiło to dla mnie.
Dan Csharpster
3

Sprawdź schemat, do którego należy procedura składowana na Twoim hoście - możliwe, że nie ma go w schemacie „dbo”.

np. jeśli znajduje się w obrębie SomeOtherSchema, wywołanie powinno mieć postać „SomeOtherSchema.aspnet_CheckSchemaVersion”

AdaTheDev
źródło
1
Dziękuję AdaTheDev. Czy możesz mi powiedzieć, jak mam się zabrać do zmiany połączenia na coś innego? Na przykład, gdzie w kodzie byłoby to ... web.config?
jay_t55
3

Miałem dokładnie ten sam błąd, kiedy włączałem, <roleManager>wierząc, że włączam ASP.NET Identity 2. To nie to samo! <roleManager>Włączone starą wersję zarządzania tożsamością, który wykorzystuje inną strukturę tabeli do ASP.NET Identity 2 (który nie potrzebuje „umożliwiające” przy okazji - to właśnie tam).

Jeśli celowo używasz starego menedżera ról i nadal otrzymujesz błąd, możesz patrzeć na wartość domyślną localdbzamiast bazy danych, w takim przypadku możesz zmodyfikować, <roleManager>aby wskazać dowolne parametry połączenia:

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

  </roleManager>

Jeśli korzystasz z ASP.NET Identity 2, oto artykuł na ten temat:
http://johnatten.com/2014/04/20/asp-net-mvc-and-identity-2-0-understanding-the- podstawy /

noelicus
źródło
1

Krótko mówiąc, należy ponownie skompilować bibliotekę dll dostawcy aspnet przy użyciu nazwy użytkownika sql przypisanej z hostingu.

  • Pobierz http://download.microsoft.com/download/a/b/3/ab3c284b-dc9a-473d-b7e3-33bacfcc8e98/ProviderToolkitSamples.msi
  • Zastąp z kodu źródłowego wszystkie odniesienia do dbo nazwą użytkownika hostującej bazy danych
  • Skompiluj (potrzebujesz programu Visual Studio) i umieść ProviderToolkitSampleProviders.dll w folderze Bin
  • W pliku web.config zamień atrybut „type” w każdym wierszu na „Microsoft.Samples., ProviderToolkitSampleProviders”
  • Zastąp w swoim lokalnym serwerze sql wszystkie odniesienia dbo nazwą użytkownika hostującej bazy danych
  • Wyeksportuj skrypt do tworzenia obiektu sql i uruchom go w zdalnej bazie danych
  • Skopiuj rekordy z lokalnej tabeli sql aspnet_SchemaVersions do zdalnej bazy danych

Inną opcją, prostszą do wypróbowania, jest zastąpienie odniesień dbo w lokalnej bazie danych serwera sql nazwą użytkownika hostującej bazy danych, a następnie przesłanie i załączenie pliku mdf.

Mam nadzieję, że to pomoże

Tomasz

Tomasz
źródło
co? jakiego koloru jest niebo w twoim świecie? lolzalot. Koleś musi tylko udostępnić swoją bazę danych lub naprawić parametry połączenia. Żadna odpowiedź nie byłaby lepsza niż ta.
Sky Sanders
1
Ups, kiedy napisał „Wykonałem wszystkie kroki poprawnie”, pomyślałem, że już wypróbował aspnet_regsql.exe i dwukrotnie sprawdził parametry połączenia. Znany mi dostawca hostingu nie zezwala na użycie aspnet_regsql.exe, więc mój jest działającym rozwiązaniem w takim przypadku.
Thomas