Hola a todos:
Tengo un problema a la hora de preparar la instalación de un programa que he hecho en visual c# utilizando como base de datos SQL Server.
El problema es el siguiente. Resulta que la primera vez que se ejecuta a la aplicación tras la instalación me he creado un formulario para configurarla.
Uno de los procesos que hago es configurar el SQL Server por código. Una de las cosas que tengo que hacer para activar los inicios de sesión con autenticación SQL es modificar el registro de Windows. Los pasos que se hacen desde que se ejecuta la aplicación hasta que se cambia el registro son los siguientes:
1. Se ejecuta la aplicación.
2. Arranco el motor de SQL Server por código para realizar una consulta a la base de datos y comprobar y la base de datos que quiero crear existe o no.
3. Una vez hecha la comprobación anterior detengo, por código, el motor de la base de datos para cambiar la clave del registro de Windows que me activa los inicios de sesión con autenticación SQL.
4. Tras cambiar el registro de Windows vuelvo a arrancar por código el motor de la base de datos.
5. Me creo por código un inicio de sesión para entrar en SQL Sever y aquí es donde viene el problema.
Pues bien, al volver a arrancar el motor tras cambiar el registro e ir a crearme el inicio de sesión me da el siguiente error al ejecutar la línea “miCommand_G.ExecuteNonQuery();”:
error en el nivel de transporte al enviar la solicitud al servidor. (Provider: proveedor de memoria compartida, error: 0 - Se está cerrando la canalización.
A continuación os pongo el código donde creo el inicio de sesión y donde me pega el fallo, por si os sirve de ayuda para darme alguna solución.
string s = "CREATE LOGIN [reformahogar] WITH PASSWORD=N'reformahogar', DEFAULT_DATABASE=[master], DEFAULT_LANGUAGE=[Español], CHECK_EXPIRATION=OFF, CHECK_POLICY=OFF ";
s += " ALTER LOGIN [reformahogar] ENABLE";
miCommand_G = new SqlCommand();
try
{
// Abrimos la conexión y ejecutamos el comando
if (miConexionSQL_CrearBD_G.State.Equals(ConnectionSt ate.Closed))
miConexionSQL_CrearBD_G.Open();
miCommand_G.CommandText = s;
miCommand_G.CommandType = CommandType.Text;
miCommand_G.Connection = miConexionSQL_CrearBD_G;
miCommand_G.ExecuteNonQuery(); // Aquí da el error
He estado buscando por internet y no he encontrado nada que me aclare el motivo por el cual se me produce este fallo.
He estado investigando cuando se produce el problema y me he dado cuenta de lo siguiente. Si cuando ejecuto por primera vez la aplicación el motor de la base de datos está previamente detenido, no lo arranco para hacer la comprobación de si existe la base de datos que quiero crear, sino que directamente con el motor parado cambio el registro de Windows, y luego arranco el motor. De esta forma no me da error.
El problema se produce al tener el motor arrancado, parar el motor, luego cambiar el registro y parece que al volverlo a arrancar algo no queda bien y al ejecutar el “ExecuteNonQuery”, me da el citado error.
He de decir que tengo habilitardas en el “surface area” las conexiones por TCP y las canalizaciones por nombre (named pipes).
Le estado dando muchas vueltas y no encuentro una razón concluyente por la cual me esté pasando esto.
Agradecería muchísimo vuestra ayuda.
Muchas gracias.