Una pregunta super-frecuente que recibo tanto en los cursos de campusMVP como en eventos es la de:

 "¿Por qué cuando paso mi aplicación a producción de repente me deja de funcionar todo lo que tiene que ver con Membership, Roles, etc...? De hecho obtengo un error de que no se puede conectar a la base de datos..."

El problema que tienes con la base de datos es que, por defecto, el proveedor de SQL Server que viene con ASP.NET 2.0 parte de la base (equivocada generalmente) de que vas a usar SQL Server 2005 Express Edition. Esta base de datos tiene la particularidad de que es capaz de adjuntar dinámicamente archivos .MDB (de datos SQL Server), es decir, sin necesidad de adjuntarlos. Si te fijas en la carpeta App_Data de tu aplicación debes de tener un archivo ASP_NET.MDB que es el que se crea automáticamente para gestionar estos datos y luego adjuntarlo dinámicamente a la versión Express.

El problema es que si usas SQL Server 2005 "completo" o una versión anterior lo de adjuntar archivos de forma dinámica no funciona. Y en un servidor de producción (aunque sea en un hosting) no suelen tener la versión Express.

Por fortuna es algo muy sencillo de solucionar pero a mi modo de ver deberían haberlo puesto un poco más evidente.

Para ello existe una utilidad en la carpeta "C:\Windows\Microsoft .NET\Framework\v2.0.xxxx" o la análoga en tu equipo que se llama: aspnet_regsql.exe.

Ejecútala. Al hacerlo te sale un asistente que te permite crear la base de datos que necesita el proveedor en cualquier SQL Server 2000/2005. Le indicas el servidor y la BD y te crea las tablas y procedimientos que necesita.
Así creas la BD que necesitas donde tú quieras.

Esta utilidad viene con .NET, no con VS, así que no hay problema para usarla en cualquier equipo, incluso en el servidor.

Ahora sólo te resta indicar a los proveedores qué base de datos van a usar. La mejor forma de hacerlo es ir a web.config y añadir lo siguiente:

<connectionStrings>
  <remove name="LocalSqlServer" />
  <add name="LocalSqlServer" connectionString="server=TUServidor;Integrated Security=SSPI;Database=TuBasedeDatos;" providerName="System.Data.SqlClient" />
</connectionStrings>

De este modo eliminas la conexión por defecto de ASP.NET (que es la que apunta a la versión express) y le indicas la cadena de conexión que necesites y el proveedor que necesites.

Con esto tu problema estará solucionado.

Este post está relacionado también con mi post anterior "Cómo usar la administración Web integrada en ASP.NET en aplicaciones de producción", así que si quieres échale un vistazo.

Jonás ("Maldecir es el único lenguaje que dominan todos los programadores", jaja), ha sido el último en preguntármelo y dada la frecuencia que tiene he decidido ponerla aquí también.

💪🏻 ¿Este post te ha ayudado?, ¿has aprendido algo nuevo?
Pues NO te pido que me invites a un café... Te pido algo más fácil y mucho mejor

Escrito por un humano, no por una IA