Una pregunta frecuente que recibimos 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 parte de la base (equivocada generalmente) de que vas a usar SQL Server 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 archivoASP_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 "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. 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.