Impossible de trouver la procédure stockée «dbo.aspnet_CheckSchemaVersion»

87

J'utilise WinHost.com pour héberger mon site. Le système de base de données SQL / d'adhésion fonctionne parfaitement sur mon ordinateur local, mais lorsqu'il est téléchargé sur le serveur, il ne fonctionne pas. J'ai suivi toutes les étapes correctement. Et j'ai contacté le support pour mon service mais cela fait plus de 2 semaines et aucune réponse.

J'obtiens toujours cette erreur lorsque j'essaye de me connecter ou d'enregistrer un nouvel utilisateur sur ma page d'adhésion sur mon 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 

Quelqu'un peut-il me dire pourquoi cette erreur s'est produite (évidemment, il ne peut pas trouver quelque chose ...), et comment je peux y remédier?

Merci à tous

Bael

jay_t55
la source
Est-il possible que vous ayez besoin de qualifier davantage le nom de processus stocké ou que le propriétaire ne soit pas dbo
David
Quelle version de SQL Server utilisez-vous?
Naeem Sarfraz le

Réponses:

164

Avez-vous couru aspnet_regsql.execontre le serveur SQL de WinHost.com?

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

Si vous ne savez pas où exécuter la commande ci-dessus, vous pouvez simplement exécuter le fichier exécutable «aspnet_regsql.exe».

Afin de localiser ce fichier, ouvrez votre boîte de commande RUN en appuyant sur la touche Windows + r et placez la commande ci-dessous %windir%\Microsoft.NET\Framework\v4.0.30319et appuyez sur Entrée, puis recherchez le fichier 'aspnet_regsql.exe'. Cela ouvrira un assistant que vous pourrez suivre pour résoudre cette erreur.

Cette erreur se produit principalement lorsque vous n'avez pas activé les rôles dans votre projet asp.net mvc au démarrage avant la création automatique de la table d'identité aspnet.

Vous devrez vous assurer que vous exécutez ceci afin que les tables et les objets soient créés sur le serveur SQL de WinHost.com.

Gabriel McAdams
la source
17
Si vous avez intégré la sécurité, utilisez l'indicateur «-E» au lieu des indicateurs «-U» (nom d'utilisateur) et «-P» (mot de passe).
dance2die
JE VOUS REMERCIE!!! Juste pour ajouter, vous pouvez l'exécuter sans argument de ligne de commande pour obtenir une interface graphique, pas tout à fait comme haxxor mais fait le travail :)
JMK
@gabriel Comment exécuter aspnet_regsql.exe?
Jam Ville
2
@IvorySantos: Si vous posez des questions sur le chemin habituel de l'exécutable, c'est par exemple "% windir% \ Microsoft.NET \ Framework \ v4.0.30319". Voir «Recherche de la version correcte d'Aspnet_regsql.exe» sur msdn.microsoft.com/en-us/library/ms229862.ASPX
kristinalim
Merci pour votre aide @Gabriel, c'est très apprécié.
jay_t55
28

Ouvrez l'invite de commande de Visual Studio à partir du dossier des outils de Visual Studio dans le menu Démarrer et tapez aspnet_regsql

et suivez l'assistant pour enregistrer la base de données pour l'adhésion asp.net et les fournisseurs de rôles.

Nitine S
la source
2
Salut mec, exécutant aspnet_regsql J'ai pu résoudre mon problème et maintenant la question est de savoir ce que ce --aspnet_regsql - fait?
Lucian Bumb
10

J'ai déjà vu ça. La base de données que vous utilisez ne contient pas les éléments de base de données requis pour les fonctionnalités d'appartenance, de gestion des rôles et de profil. Vous avez donc plusieurs options:

  1. Copiez les tables, les procédures stockées et les vues de votre serveur SQL local à l'aide de SQL Management Studio ou d'une application similaire
  2. Utilisez l' outil aspnet_regsql.exe pour installer à nouveau les scripts selon les instructions de cet article (je ne pense pas que vous puissiez utiliser l'outil contre une base de données distante si elle est verrouillée. Vous devrez donc exporter les scripts et exécuter les manuellement)
Naeem Sarfraz
la source
5

J'ai le même problème: je copie / colle connectionString à partir SQL Object managerde Visual Studio et oublie de taper Initial Catalog=YourDatabaseName.

Maxim Joukov
la source
J'ai eu à la Initial Catalog=masterplace deInitial Catalog=YourDatabaseName
David Ching
Merci! Cela a réglé le problème pour moi.
Dan Csharpster
3

Vérifiez le schéma auquel appartient la procédure stockée sur votre hôte - il se peut qu'il ne soit pas dans le schéma "dbo".

Par exemple, s'il se trouve dans SomeOtherSchema, votre appel devra être "SomeOtherSchema.aspnet_CheckSchemaVersion"

AdaTheDev
la source
1
Merci AdaTheDev. Pouvez-vous s'il vous plaît me dire comment je procéderais pour changer l'appel en autre chose? Comme, où dans le code serait-il ... web.config?
jay_t55
3

J'ai eu exactement la même erreur lorsque j'avais activé en <roleManager>pensant que j'activais ASP.NET Identity 2. Ils ne sont pas les mêmes! L' <roleManager>activation d'une ancienne version de la gestion des identités qui utilise une structure de table différente de ASP.NET Identity 2 (qui n'a pas besoin d'être "activée" d'ailleurs - c'est juste là).

Si vous utilisez intentionnellement l'ancien gestionnaire de rôles et que vous obtenez toujours l'erreur, vous recherchez peut-être la valeur par défaut localdbau lieu de votre base de données, auquel cas vous pouvez modifier <roleManager>pour pointer vers n'importe quelle chaîne de connexion souhaitée:

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

  </roleManager>

Si vous êtes après avoir utilisé ASP.NET Identity 2, voici un article à ce sujet:
http://johnatten.com/2014/04/20/asp-net-mvc-and-identity-2-0-understanding-the- bases /

noelicus
la source
1

En bref, vous devez recompiler la dll du fournisseur aspnet en utilisant le nom d'utilisateur SQL qui vous a été attribué depuis votre hébergement.

  • Téléchargez le http://download.microsoft.com/download/a/b/3/ab3c284b-dc9a-473d-b7e3-33bacfcc8e98/ProviderToolkitSamples.msi
  • Remplacez depuis le code source toutes les références à dbo par le nom d'utilisateur de votre base de données d'hébergement
  • Compilez (vous avez besoin de Visual Studio) et placez le ProviderToolkitSampleProviders.dll dans le dossier Bin
  • Dans votre web.config, remplacez l'attribut "type" de chaque ligne par "Microsoft.Samples., ProviderToolkitSampleProviders"
  • Remplacez dans votre serveur SQL local toutes les références dbo par le nom d'utilisateur de votre base de données d'hébergement
  • Exportez le script de création d'objet sql et exécutez-les sur la base de données distante
  • Copiez les enregistrements de votre table sql locale aspnet_SchemaVersions dans la base de données distante

Une autre option, plus simple à essayer, consiste à remplacer les références dbo dans la base de données de votre serveur SQL local par le nom d'utilisateur de votre base de données d'hébergement, puis à télécharger et à joindre votre fichier mdf.

J'espère que cela aide

Thomas

Thomas
la source
hein? De quelle couleur est le ciel de ton monde? lolzalot. Mec a juste besoin de provisionner sa base de données ou de réparer sa chaîne de connexion. Aucune réponse n'aurait été meilleure que cela.
Sky Sanders
1
Oups quand il a écrit "J'ai suivi toutes les étapes correctement", je pensais qu'il avait déjà essayé aspnet_regsql.exe et avait revérifié la chaîne de connexion. Un fournisseur d'hébergement que je connais n'autorise pas aspnet_regsql.exe, donc le mien est une solution de travail pour ce cas.
Thomas