No se pudo encontrar el procedimiento almacenado 'dbo.aspnet_CheckSchemaVersion'

87

Estoy usando WinHost.com para alojar mi sitio. El sistema de membresía / base de datos SQL funciona perfectamente en mi computadora local, pero cuando se carga en el servidor no funciona. He seguido todos los pasos correctamente. Y me he puesto en contacto con el soporte para mi servicio, pero han pasado más de 2 semanas y no he recibido respuesta.

Sigo recibiendo este error cuando intento iniciar sesión o registrar un nuevo usuario en mi página de membresía en mi sitio.

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 

¿Alguien puede decirme por qué ha ocurrido este error (obviamente no puede encontrar algo ...) y cómo puedo solucionarlo?

Gracias a todos

Bael

jay_t55
fuente
¿Es posible que necesite calificar aún más el nombre del proceso almacenado o el propietario no es dbo?
David
¿Qué versión de SQL Server estás usando?
Naeem Sarfraz

Respuestas:

164

¿ aspnet_regsql.exeCorrió contra el servidor sql de WinHost.com?

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

Si no sabe dónde ejecutar el comando anterior, simplemente puede ejecutar el archivo ejecutable 'aspnet_regsql.exe'.

Para ubicar este archivo, abra su cuadro de comando RUN presionando la tecla de Windows + r y coloque el comando debajo y presione %windir%\Microsoft.NET\Framework\v4.0.30319enter y luego busque el archivo 'aspnet_regsql.exe'. Se abrirá un asistente que puede seguir para resolver este error.

Este error ocurre principalmente cuando no habilitó los roles en su proyecto asp.net mvc al comenzar antes de que se creara automáticamente la tabla de identidad aspnet.

Deberá asegurarse de ejecutar esto para que las tablas y los objetos se creen en el servidor SQL de WinHost.com.

Gabriel McAdams
fuente
17
Si tiene seguridad integrada, use el indicador "-E" en lugar de los indicadores "-U" (nombre de usuario) y "-P" (contraseña).
dance2die
¡¡¡GRACIAS!!! Solo para agregar, puede ejecutar esto sin argumentos de línea de comando para obtener una GUI, no tan haxxor pero hace el trabajo :)
JMK
@gabriel ¿Cómo ejecutar aspnet_regsql.exe?
Jam Ville
2
@IvorySantos: Si preguntaba por la ruta habitual del ejecutable, es, por ejemplo, "% windir% \ Microsoft.NET \ Framework \ v4.0.30319". Consulte "Encontrar la versión correcta de Aspnet_regsql.exe" en msdn.microsoft.com/en-us/library/ms229862.ASPX
kristinalim
Gracias por tu ayuda @Gabriel, es muy apreciado.
jay_t55
28

Abra el símbolo del sistema de Visual Studio desde la carpeta de herramientas de Visual Studio desde el menú de inicio y escriba aspnet_regsql

y siga el asistente para registrar la base de datos para los proveedores de roles y miembros de asp.net.

Nitin S
fuente
2
Hola amigo, al ejecutar aspnet_regsql pude solucionar mi problema y ahora la pregunta es ¿qué hace esto --aspnet_regsql?
Lucian Bumb
10

He visto esto antes. La base de datos que está utilizando no tiene los elementos de base de datos necesarios para las funciones de membresía, administración de roles y perfil. Entonces tienes un par de opciones:

  1. Copie las tablas, los procedimientos almacenados y las vistas desde su servidor SQL local utilizando SQL Management Studio o una aplicación similar
  2. Use la herramienta aspnet_regsql.exe para instalar los scripts de nuevo según las instrucciones de esta publicación (no creo que pueda usar la herramienta contra una base de datos remota si está bloqueada. Por lo tanto, tendrá que exportar los scripts y ejecutar ellos manualmente)
Naeem Sarfraz
fuente
5

Tengo el mismo problema: copio / pego connectionString desde SQL Object managerVisual Studio y me olvido de escribir Initial Catalog=YourDatabaseName.

Maxim Zhukov
fuente
Tuve en Initial Catalog=masterlugar deInitial Catalog=YourDatabaseName
David Ching
¡Gracias! Eso me lo arregló.
Dan Csharpster
3

Verifique el esquema al que pertenece el procedimiento almacenado en su host - podría ser que no esté en el esquema "dbo".

por ejemplo, si está dentro de SomeOtherSchema, su llamada debería ser "SomeOtherSchema.aspnet_CheckSchemaVersion"

AdaTheDev
fuente
1
Gracias AdaTheDev. ¿Puede decirme cómo haría para cambiar la llamada por otra? Por ejemplo, ¿dónde estaría en el código ... web.config?
jay_t55
3

Tuve exactamente el mismo error cuando habilité <roleManager>creyendo que habilitaba ASP.NET Identity 2. ¡ No son lo mismo! La <roleManager>habilitar una versión antigua de gestión de identidad que utiliza una estructura de tabla diferente a ASP.NET Identidad 2 (que no necesita "facilitador" por cierto - es sólo allí).

Si está utilizando intencionalmente el antiguo administrador de roles y aún recibe el error, es posible que esté mirando el predeterminado en localdblugar de su base de datos, en cuyo caso puede modificar <roleManager>para apuntar a cualquier cadena de conexión que desee:

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

  </roleManager>

Si desea utilizar ASP.NET Identity 2, aquí hay un artículo al respecto:
http://johnatten.com/2014/04/20/asp-net-mvc-and-identity-2-0-understanding-the- lo esencial/

Noelicus
fuente
1

En resumen, debe volver a compilar la dll del proveedor de aspnet utilizando el nombre de usuario sql que le asignó su alojamiento.

  • Descargue http://download.microsoft.com/download/a/b/3/ab3c284b-dc9a-473d-b7e3-33bacfcc8e98/ProviderToolkitSamples.msi
  • Reemplace del código fuente todas las referencias a dbo con el nombre de usuario de su base de datos de alojamiento
  • Compile (necesita Visual Studio) y coloque ProviderToolkitSampleProviders.dll en la carpeta Bin
  • En su web.config, reemplace el atributo "tipo" de cada línea con "Microsoft.Samples., ProviderToolkitSampleProviders"
  • Reemplace en su servidor sql local todas las referencias dbo con el nombre de usuario de su base de datos de alojamiento
  • Exporte el script de creación de objetos sql y ejecútelos en la base de datos remota
  • Copie los registros de su tabla sql local aspnet_SchemaVersions a la base de datos remota

Otra opción, más sencilla de probar, es reemplazar las referencias dbo en la base de datos de su servidor SQL local con el nombre de usuario de su base de datos de alojamiento, luego cargue y adjunte su archivo mdf.

Espero eso ayude

Thomas

Thomas
fuente
eh ¿De qué color es el cielo en tu mundo? lolzalot. Dude solo necesita aprovisionar su base de datos o arreglar su cadena de conexión. Ninguna respuesta hubiera sido mejor que esta.
Sky Sanders
1
Vaya, cuando escribió "He seguido todos los pasos correctamente", pensé que ya había probado aspnet_regsql.exe y comprobó dos veces la cadena de conexión. Un proveedor de alojamiento que conozco no permite aspnet_regsql.exe, por lo que la mía es una solución funcional para ese caso.
Thomas