Atach i detach una base de datos desde código sharp

07/07/2009 - 10:39 por Paul | Informe spam
Hola,

Como se puede hacer un atach i un detach de la base de datos desde
codigo sharp?

Gracias

Preguntas similare

Leer las respuestas

#1 Alberto Poblacion
07/07/2009 - 15:27 | Informe spam
"Paul" wrote in message
news:
Como se puede hacer un atach i un detach de la base de datos desde
codigo sharp?




Para el attach, se llama al procedimiento almacenado sp_attach_db, o
mejor todavía, se ejecuta un "CREATE DATABASE ... FOR ATTACH", que es la
alternativa moderna.

Para el detach, se llama al procedimiento sp_detach_db. Para ejecutarlo,
se requiere acceso exclusivo a la base de datos en cuestión, cosa que puede
conseguirse abriendo una conexión a la Master y ejecutando un "ALTER
DATABASE ... SET SINGLE_USER".

En ambos casos, se trata de una sentencia que se puede ejecutar con el
método ExecuteNonQuery de un SqlCommand, parametrizándolo debidamente.
Respuesta Responder a este mensaje
#2 Paul
08/07/2009 - 07:33 | Informe spam
Buenos dias,

Lo que quiero hacer desde código, des de un programa de c#. La base de
datos es Sql Server 2008.

Saludos


On 7 jul, 15:27, "Alberto Poblacion" <earthling-
wrote:
"Paul" wrote in message

news:

> Como se puede hacer un atach i un detach de la base de datos desde
> codigo sharp?

    Para el attach, se llama al procedimiento almacenado sp_attach_db, o
mejor todavía, se ejecuta un "CREATE DATABASE ... FOR ATTACH", que es la
alternativa moderna.

    Para el detach, se llama al procedimiento sp_detach_db. Para ejecutarlo,
se requiere acceso exclusivo a la base de datos en cuestión, cosa que puede
conseguirse abriendo una conexión a la Master y ejecutando un "ALTER
DATABASE ... SET SINGLE_USER".

    En ambos casos, se trata de una sentencia que se puede ejecutar con el
método ExecuteNonQuery de un SqlCommand, parametrizándolo debidamente.
Respuesta Responder a este mensaje
#3 Alberto Poblacion
08/07/2009 - 07:50 | Informe spam
"Paul" wrote in message
news:
Lo que quiero hacer desde código, des de un programa de c#.
La base de datos es Sql Server 2008.



Pues claro, lo que hay que hacer desde el código C# es enviar al
servidor la sentencia SQL. Me imaginaba que tu problema era cúal es la
sentencia SQL que se necesitaba enviar al servidor, no cómo se envía al
servidor una sentencia desde C#. Para enviarla basta con usar el
ExecuteNonQuery de un SqlCommand, como te decía al final del mensaje:

using (SqlConnection cn = new SqlConnection(cadenaDeConexion))
{
cn.Open();
SqlCommand cmd = new SqlCommand(sentencia);
cmd.ExecuteNonQuery();
}

Como ves, enviar la sentencia desde C# es muy simple, y daba por sentado
que ya lo conocías dado que de la pregunta se intuía que ya estabas
trabajando con bases de datos. Lo difícil es saber cuál es el contenido que
hay que enviar dentro de esa "sentencia", que es precisamente lo que trataba
de indicarte en el mensaje anterior, dándote los nombres de los
procedimientos que hay que invocar para que pudieras buscarlos en el manual
de Sql Server y comprobar así cuáles son todas sus opciones y parámetros.
Respuesta Responder a este mensaje
#4 FRVSoft
08/08/2009 - 19:30 | Informe spam
Otra posibilidad sería usar SMO para hacer lo que quieres. Si quieres
separar la BD, lo primero que haría sería hacer un kill a todas las
conexiones y luego separar la BD.
//Aquí te pongo el código de cómo hacer el kill
using (SqlConnection cn = new SqlConnection(cadenaDeConexion))
{
cn.Open();
ServerConnection serverConnection = new
ServerConnection(cn);
Server server = new Server(serverConnection);
server.KillAllProcesses(serverConnection.DatabaseName);
}

Para el detach tienes un link
http://msdn.microsoft.com/en-us/lib...abase.aspx
No te lo voy a dar todo hecho, jejeje.

"Alberto Poblacion"
escribió en el mensaje de noticias
news:%23wp4$$4$
"Paul" wrote in message
news:
Lo que quiero hacer desde código, des de un programa de c#.
La base de datos es Sql Server 2008.



Pues claro, lo que hay que hacer desde el código C# es enviar al
servidor la sentencia SQL. Me imaginaba que tu problema era cúal es la
sentencia SQL que se necesitaba enviar al servidor, no cómo se envía al
servidor una sentencia desde C#. Para enviarla basta con usar el
ExecuteNonQuery de un SqlCommand, como te decía al final del mensaje:

using (SqlConnection cn = new SqlConnection(cadenaDeConexion))
{
cn.Open();
SqlCommand cmd = new SqlCommand(sentencia);
cmd.ExecuteNonQuery();
}

Como ves, enviar la sentencia desde C# es muy simple, y daba por
sentado que ya lo conocías dado que de la pregunta se intuía que ya
estabas trabajando con bases de datos. Lo difícil es saber cuál es el
contenido que hay que enviar dentro de esa "sentencia", que es
precisamente lo que trataba de indicarte en el mensaje anterior, dándote
los nombres de los procedimientos que hay que invocar para que pudieras
buscarlos en el manual de Sql Server y comprobar así cuáles son todas sus
opciones y parámetros.

email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida