Foros del Web » Programación para mayores de 30 ;) » .NET »

Restaurar BD SQL 2005 desde C#

Estas en el tema de Restaurar BD SQL 2005 desde C# en el foro de .NET en Foros del Web. Hola gente.. Tengo el siguiente problema.. Les Cuento Tengo un Boton para poder restaurar una Base de Datos de SQL 2005.. Funciona bien.. pero el ...
  #1 (permalink)  
Antiguo 19/10/2009, 20:38
 
Fecha de Ingreso: septiembre-2009
Mensajes: 9
Antigüedad: 15 años, 5 meses
Puntos: 0
Pregunta Restaurar BD SQL 2005 desde C#

Hola gente..
Tengo el siguiente problema.. Les Cuento

Tengo un Boton para poder restaurar una Base de Datos de SQL 2005.. Funciona bien.. pero el problema llega si abro esa base de datos antes de Restaurar.. Tengo el Siguiente Ejemplo
Código:
 
private void Form1_Load(object sender, EventArgs e)
        {
            string strconn = "Data Source=Shady;Initial Catalog=Practico 6 - Brian;Integrated Security=true";
            SqlConnection conn = new SqlConnection();

            conn.ConnectionString = strconn;
            SqlDataAdapter da = new SqlDataAdapter("select * from Pais", conn);
            DataSet ds = new DataSet();  
            da.Fill(ds);

            comboBox1.DataSource = ds.Tables[0];
            comboBox1.DisplayMember = "NombrePais";
            comboBox1.ValueMember = "IDPais";           
        }



y el Boton Restaurar BD



        private void button3_Click(object sender, EventArgs e)
        {
            try
            {
                string strmaster = "Data Source=Shady;Initial Catalog=master;Integrated Security=true";
                SqlConnection masterconn = new SqlConnection();

                masterconn.ConnectionString = strmaster;

                OpenFileDialog ofd = new OpenFileDialog();
                ofd.Title = "Abrir BD";
                ofd.Filter = "Backup SQL | *.bak";
                if (ofd.ShowDialog() == DialogResult.OK)
                {
                    MessageBox.Show("RESTORE DATABASE [Practico 6 - Brian] FROM DISK='" + ofd.FileName + "' WITH REPLACE");
                    SqlCommand comando = new SqlCommand();
                    comando.CommandText = "RESTORE DATABASE [Practico 6 - Brian] FROM DISK='" + ofd.FileName + "' WITH REPLACE";
                    comando.Connection = masterconn;
                    masterconn.Open();
                    comando.ExecuteNonQuery();
                    masterconn.Close();
                }
            }
            catch (SqlException ex)
            {
                MessageBox.Show(ex.Message, "Error");
            }
        }
el caso es q si no abro la BD antes de hacer el Restore va todo bien.... pero con este ejemplo la cosa cambia.. Me da el Siguiente Error:

Cita:
"No se pudo obtener acceso exclusivo porque la base de datos está en uso."
como si la conexion siguiera abierta pero no...

en el evento load al Final probe con " conn.Dispose(); ".. pero todo sigue igual

Espero que alguien me pueda ayudar..
Gracias!!

Última edición por fck_shady; 20/10/2009 a las 10:38
  #2 (permalink)  
Antiguo 20/10/2009, 09:35
Avatar de Malenko
Moderador
 
Fecha de Ingreso: enero-2008
Mensajes: 5.323
Antigüedad: 17 años, 1 mes
Puntos: 606
Respuesta: Restaurar BD SQL 2005 desde C#

Dos consejos:
1) Usa siempre bloques try/catch/finally cuando trabajes con conexiones de BBDD
2) En el finally has de hacer el Dispose de la conexión.


El evento Load te tendría que quedar tal que así:

Código:
private void Form1_Load(object sender, EventArgs e)
{
SqlConnection conn = null;

try {
     conn = new SqlConnection("string strconn = "Data Source=Shady;Initial Catalog=Practico 6 - Brian;Integrated Security=true");
     conn.open();
     SqlDataAdapter da = new SqlDataAdapter("select * from Pais", conn);
     DataSet ds = new DataSet();
     da.Fill(ds);

     comboBox1.DataSource = ds.Tables[0];
     comboBox1.DisplayMember = "NombrePais";
     comboBox1.ValueMember = "IDPais";
}
catch (Exception ex) {
}
finally
{
     if (conn!=null)
         conn.Dispose();
}
}
__________________
Aviso: No se resuelven dudas por MP!
  #3 (permalink)  
Antiguo 20/10/2009, 15:22
 
Fecha de Ingreso: septiembre-2009
Mensajes: 9
Antigüedad: 15 años, 5 meses
Puntos: 0
Respuesta: Restaurar BD SQL 2005 desde C#

Cita:
Iniciado por Malenko Ver Mensaje
Dos consejos:
1) Usa siempre bloques try/catch/finally cuando trabajes con conexiones de BBDD
2) En el finally has de hacer el Dispose de la conexión.
Gracias por tus consejos.. pero siempre uso try y catch.. solo q en ese pequeño ejemplo no lo use.. xq la idea era q vean q al hacer una colsulta sobre la BD despues no puedo restaurar..
Tambien podes ver q el evento Click del "button3" uso try y catch para tratar de restaurar la BD

y donde me das el codigo.. no hace falta el "conn.Open()".. ya que el SqlDataAdapter se encarga de abrir y cerrar la BD.

Gracias.
  #4 (permalink)  
Antiguo 20/10/2009, 15:27
 
Fecha de Ingreso: septiembre-2009
Mensajes: 9
Antigüedad: 15 años, 5 meses
Puntos: 0
Respuesta: Restaurar BD SQL 2005 desde C#

Fui probando varias cosas y siempre igual...

Miren ahora Cambie esto

Código:
private void Form1_Load(object sender, EventArgs e)
        {
             SqlConnection conn = new SqlConnection("Data Source=Shady;Initial Catalog=Practico 6 - Brian;Integrated Security=true");

             conn.Open();
             conn.Close(); 
        }



y el Boton Restaurar BD



        private void button3_Click(object sender, EventArgs e)
        {
            try
            {
                string strmaster = "Data Source=Shady;Initial Catalog=master;Integrated Security=true";
                SqlConnection masterconn = new SqlConnection();

                masterconn.ConnectionString = strmaster;

                OpenFileDialog ofd = new OpenFileDialog();
                ofd.Title = "Abrir BD";
                ofd.Filter = "Backup SQL | *.bak";
                if (ofd.ShowDialog() == DialogResult.OK)
                {
                    MessageBox.Show("RESTORE DATABASE [Practico 6 - Brian] FROM DISK='" + ofd.FileName + "' WITH REPLACE");
                    SqlCommand comando = new SqlCommand();
                    comando.CommandText = "RESTORE DATABASE [Practico 6 - Brian] FROM DISK='" + ofd.FileName + "' WITH REPLACE";
                    comando.Connection = masterconn;
                    masterconn.Open();
                    comando.ExecuteNonQuery();
                    masterconn.Close();
                }
            }
            catch (SqlException ex)
            {
                MessageBox.Show(ex.Message, "Error");
            }
        }
El el evento load Solo Abro la BD y Luego la cierro.. y al tratar restaurar Con el Boton.. sigo teniendo el Mismo Problema..

Cita:
"No se pudo obtener acceso exclusivo porque la base de datos está en uso."
No Entiendo...
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 12:38.