Ejecutar Scripts Sql Server con C# y Visual Basic.NET

En este artículo veremos como se puede ejecutar un Script SQL Server para realizar una copia de seguridad utilizando C# en Visual Studio con la ayuda de SQLCMD. SQLCMD es la línea de comandos de SQL Server. Esta línea de comandos nos permite ejecutar scripts T-SQL. SQLCMD es un método rápido y sencillo de ejecutar scripts. En Visual Studio estaremos llamando a SQLCMD utilizando la clase ProcessStartInfo. Esta clase es utilizada para iniciar procesos. En este código vamos a llamar al proceso SQLCMD. Al final del artículo tendrán una aplicación de ejmplo con un botón con una llamada a un script .sql. En este caso, el script generará una copia de seguridad de la base de datos:

El botón "llamar a SQLCMD" creará una copia de seguridad utilizando la clase ProcessStartInfo. Para mayor referencia acerca de la clase ProcessStartInfo, el sqlcmd y ejecución scripts con sqlcmd puedes leer aquí.

 Los archivos incluídos: pruebas.zip es la copia de seguridad de la base de datos y callSQLcmd.zip es el proyecto en Visual Studio 2010 para c# y Vb.NET.

Demostración

Primero que todo hay que crear un script llamado backup.sql para realizar la copia de seguridad de la base de datos. El nombre del script es backup.sql y contiene:


BACKUP DATABASE [Pruebas] TO DISK = N'C:\backup\pruebas.bak' WITH NOFORMAT, NOINIT, NAME = N'test-Full Database Backup', SKIP, NOREWIND, NOUNLOAD, STATS = 10
GO


Este script creará una copia de seguridad de la base de datos de prueba. Para ejecutar el script backup.sql utilizando sqlcmd, ve a la ventana de línea de comandos y ejecuta la siguiente sentencia:


sqlcmd -S .\sqlexpress -i C:\backup.sql 

o

sqlcmd -S Usuario-PC -i C:\backup.sql 


Explicación

-S .\sqlexpress (la  –S está en mayúsculas) indica el nombre del servidor. En este caso es la máquina local y una instancia SQL Server Express. Por ejemplo, si estás utilizando la instancia por defecto y el nombre del servidor es Server1 y el dominio del Directorio Activo es llamado sqlcentral, la línea de comandos podría ser:


sqlcmd -S sqlcentral\Server1 -i C:\backup.sql -i c:\backup.sql 


El parametro -i es la entrada (es en minúsculas) y  c:\backup.sql es la ruta del script. Por defecto se utiliza la autentificación por Windows.

Utilizando un Windows Form en C# para llamar a SQLCMD

Tenemos una línea de comandos SQL que crea una copia de seguridad de SQL Server. Ahora vamos a crear una aplicación Windows en C# que llame a SQLCMD. Dentro del formulario arrastraremos un botón desde el cuadro de Herramientas de Visual Studio. El botón llamará a la línea de comandos sqlcmd para crear la copia de seguridad llamada test utilizando sqlcmd. Haz doble click en el botón y agrega el siguiente código:


using System.Diagnostics; 


También:



// Indica si el cursor del sistema operativo es utilizado, en este caso no
UseShellExecute = false; 
//ninguna ventana nueva es requerida
info.CreateNoWindow = true; 
//The windows style will be hidden 
info.WindowStyle = ProcessWindowStyle.Hidden; 
//The output will be read by the starndar output process 
info.RedirectStandardOutput = true; 
Process proc = new Process(); 
proc.StartInfo = info; 
//Start the process 
proc.Start();


The most important section of the code is the following:


ProcessStartInfo info = new ProcessStartInfo("sqlcmd", @" -S  -i C:\backup\backup.sql"); 


En esta sección estamos llamando a sqlcmd y ejecutando el script backup.sql utilizando la clase processStartInfo. Es el núcleo del código. El resto es solo la configuración nde los parámetros del proceso. El código está llamando a la instancia del servidor SQL Express utilizando el parametro -S. El parámetro -i es la entrada. En este ejemplo la entrada es el script backup.sql. La autentificación utilizada es la autentificación por Windows, mientras el usuario que ejecute la aplicación tenga permisos en la base de datos, no habrá problemas.

Probando tu código

Ahora presiona el botón Ejecutar en Visual Studio y haz click en el botón del formulario. Una nueva copia de seguridad debería crearse en c:\backup.

 
Conclusión

En este artículo vemos como llamar a sqlcmd y ejecutar un script Sql utilizando visual studio.

Recursos

Descarga ejemplo para C# 
Descarga ejemplo para Vb.NET
Copia de seguridad Pruebas

11 Consejos para Hacer Copias de Seguridad con SMO, VB, C# PowerShell y Línea de Comandos

Introducción

Algunas veces necesitamos crear copias de seguridad utilizando código, y necesitamos hacerlo de forma manual o automática, o tal vez programáticamente utilizando C#, VB, Powershell. Este tutorial te enseñará 11 formas de hacerlo.

Consejo 1: La copia de seguridad simple

La forma más sencilla de crear una copia de seguridad es utilizando el SQL Server Management Studio (Administrador Corporativo) con un click derecho en la base de datos y seleccionado Tasks (Tareas)>Backup (Copia de Seguridad).

Puedes elegir la ruta por defecto para realizar la copia de seguridad y especificar otras opciones de la copia de seguridad en el diálogo que aparece.

Consejo 2: Generar código T-SQL para realizar la copia de seguridad automáticamente

Para generar el código T-SQL, necesitas utilizar la opción del menú Script Action to New Query Window (Nueva Ventana de Consulta) o to File (Archivo) o Clipboard (Portapapeles).  Estas opciones generaran el código T-SQL para realizar la copia de seguridad automáticamente.

El código creado automáticamente:

BACKUP DATABASE [test] TO  DISK = N'C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\Backup\test.bak' WITH NOFORMAT, NOINIT,  NAME = N'test-Full Database Backup', SKIP, NOREWIND, NOUNLOAD,  STATS = 10

GO


Consejo 3: Copia de seguridad utilizando la línea de comandos


Algunas veces necesitamos utilizar la línea de comandos para realizar la copia de seguridad. Para esos casos, puedes utilizar la utilidad sqlcmd que viene con SQL Server. Para iniciarla, en una ventana de línea de comandos ejecuta el comando SQLCMD. En una máquina local la utiliza se conectará a la instancia, en otro caso deberías especificar el nombre del servidor de la siguiente forma:



Sqlcmd –S dominio\nombreinstancia


Para realizar la copia de seguridad de la base de datos estariamos utilizando el T-SQL que generamos en el Consejo 2, en un archivo llamado sqlbackup.sql.Para ejecutar el script ejecuta este comando en la ventana de línea de comandos:



Sqlcmd –i c:\sqlbackup.sql


Este comando ejecuta el archivo .sql y crea una copia de seguridad.



Consejo 4: Crea una copia de seguridad programada utilizando Jobs del mismo SQL Server


Los jobs o trabajos nos dejan programar diferentes tareas para administración y mantenimiento. Puede programar que una copia de seguridad se realice diariamente a una hora especifica. La forma más fácil de hacerlo es seleccionar "Script Action to Job" en la ventana mencionada en Consejo 1.





El trabajo es creado automáticamente.





Y puedes especificar la programación en la que se realizará la copia de seguridad.







Consejo 5: Programar una copia de seguridad sin el SQL Agent


Alguna veces solo tienes la edición SQL Express, la cual no incluye el SQL Agent. En este caso puedes utilizar el Consejo 3 dentro de un archivo por lotes como el siguiente:



Nombre de Archivo:Backup.bat



Sqlcmd –i c:\sqlbackup.sql


Luego puedes utilizar el programador de tareas que viene con el sistema operativo Windows y llamar el archivo .bat.







Consejo 6: Crear una copia de seguridad utilizando PowerShell


PowerShell es una herramienta muy poderosa que puede ser utilizada para tareas administrativas automatizadas relacionadas con el sistema operativo, bases de datos, servidor web, servidor de correo, etc. Es algo bastante útil que con unas cuantas líneas de código nos hace la vida más sencilla.



Para iniciar PowerShell, haz click derecho en Databases (Bases de datos) en el SQL Server Management Studio y selecciona Iniciar Powershell.





Necesitaremos el archivo sqlbackup1.sql creado en el consejo 3. Para invocar el script SQL con PowerShell, ejecuta la siguiente línea:



Invoke-Sqlcmd -InputFile "C:\sqlbackup1.sql"


Consejo 7: El asistente de Planes de Mantenimiento (Maintenance plan wizard)


SQL Server trae incluído un asistente para generar copias de seguridad, mantenimiento de índices, reducir bases de datos, etc. Para iniciar el asistente, vamos a Management>Maintenance Plan y seleccionamos el Maintenance Plan Wizard.





Puedes revisar la integridad de bases de datos, reducir, reorganizar índices, etc. En este caso queremos ejecutar la copia de seguridad de una base de datos.





Puedes seleccionar múltiples bases de datos para realizar la copia de seguridad desde este diálogo.



Consejo 8: El Plan de Mantenimiento



Algunas veces necesitamos personalizar un plan de mantenimiento y el asistente no nos puede ayudar lo suficiente. En este caso creamos un nuevo plan de mantenimiento (maintenance plan).





Esta herramienta te deja crear tareas y puedes conectar las tareas gráficamente. Puedes cambiar el orden de las tareas cuando sean ejecutadas o ejecutar diferentes tareas en caso una falle.







Consejo 9: SQL Server Data Tools


Si tienes SQL Server 2008 o 2005 esta aplicación se llama SQL Server Business Intelligence (BIDS), pero en SQL Server 2012 fue renombrada a SQL Server Data Tools.





En SSDT, puedes abrir un Integration Service Project y luego puedes combinar la copia de seguridad con otras tareas como enviar email, tareas de FTP, ejecutar procesos. Por ejemplo puedes recibir un email si la copia de seguridad falla o subirla a un FTP. También puedes invocar archivos por lotes, llamar servicios web o ejecutar scripts C#.





Consejo 10. ADO.net



Para Windows Forms y ASP.net es común utilizar ADO.net. ADO.net es utilizado en aplicaciones para insertar, eliminar o actualizar datos. Sin embargo puedes hacer una copia de seguridad de una base de datos utilizando ADO.net. el siguiente es un ejemplo de como realizar una copia de seguridad.



//C# codigo para crear una copia de seguridad con ADO.net
using System.Data.SqlClient;


//Crear una conexión a la base de datos de prueba.


//Integrated security is Windows
//Authentication
string ConnectionString = @"Data Source=Localhost;" +
"Initial Catalog=test;Integrated Security=True";
SqlConnection cnn = new SqlConnection(ConnectionString);

//backup the database test in the c:\backup folder
SqlCommand cmd = new SqlCommand(@"BACKUP DATABASE [test] TO "+
@"DISK = N'C:\backup\test.bak'", cnn);
cmd.CommandType = CommandType.Text;

cnn.Open();
//Execute the command

cmd.ExecuteNonQuery();

Console.Write("Backup completed successfully");

cnn.Close();


Consejo 11. SMO


SMO o SQL Management Objects es una gran opción utilizada por C# y Visual Basic. El siguiente ejemplo muestra como realizar una copia de seguridad utilizando VB:



Necesitas agregar los siguiente ensamblados: 




  • Microsoft.SqlServer.ConnectionInfo.dll


  • Microsoft.SqlServer.Smo.dll


  • Microsoft.SqlServer.SmoEnum.dll


  • Microsoft.SqlServer.SqlEnum.dll


  • Microsoft.SqlServer.Management.Sdk.Sfc.dll 



Luego crear el código:



Imports Microsoft.SqlServer.Management.Smo
Sub Main()

'Enter the name of the database
backupmethod("test")

End Sub
'Method to make the Backup
Private Sub backupmethod(bd)
Dim Myserver As Server = New Server("localhost")
'Create the instance of the class backup
Dim backup As Backup = New Backup()
'Use windows authentication
Myserver.ConnectionContext.LoginSecure = True
Try
'Connect to the server
Myserver.ConnectionContext.Connect()
Console.WriteLine("*** Backing up ***")
Dim path As String
'Set the path of the backup
path = "C:\Testd.bak"
backup.Devices.AddDevice(path, DeviceType.File)
backup.Database = bd

'select the type of backup action (you can also make backup
'copies of records and archives)
backup.Action = BackupActionType.Database
'If the backup is not incremental set to false
backup.Incremental = False

backup.Initialize = True
backup.LogTruncation = BackupTruncateLogType.Truncate
backup.SqlBackup(Myserver)
Console.ReadKey()
'close the connection to server
Myserver.ConnectionContext.Disconnect();
Catch ex As Exception
Console.WriteLine("Connection failed.")
End Try

End Sub


Conclusiones



Cuando trabajas con SQL Server necesitas conectar con otras aplicaciones utilizando métodos diferentes. El tutorial presente muestra algunas herramientas para crear copias de seguridad. Dependiendo de las circunstancias puedes necesitar un método diferente.