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.

Conectar Visual Basic .NET a SQL Server 2008

Un amigo ha pedido explique como conectar Visual Basic .NET a una base de datos en SQL Server 2008 R2. Veamos como se hace.

Primeramente tenemos que crear un proyecto en Visual Studio (tengo la versión 2008). Por defecto se crea el proyecto con un formulario. Hacemos doble click sobre el formulario para ver el panel del código.

Escribimos la siguiente sentencia arriba de la definición de clase del formulario

Imports System.Data.SqlClient

Quedará como vemos en la imagen:

image

Luego estableceremos la conexión a la base de datos, para eso necesitamos dos datos: el nombre de la instancia del servidor SQL Server y el nombre de la base de datos. Con ellos creamos la cadena de conexión que nos permitirá conectarnos al servidor. Como ven, utilizamos la opción de conexión con seguridad integrada.

image

Luego declaramos el objeto SqlConnection llamado CnxBD , que es el que hace el trabajo de establecer comunicación con el servidor y la base de datos. Y lo único que necesitamos es abrir la conexión con el método Open.

image

Con esa sentencia ya tendremos abierta una conexión a una base de datos de un servidor SQL Server.

Esto es algo básico y como ven no tiene mucha complejidad, posterior a esto, ya podemos ir utilizando otros objetos como SqlCommand, Dataset, etc.

Descargar código del ejemplo.

Si tienes alguna duda o consulta, deja tu comentario.

Pantalla de Bienvenida con Windows Forms

En este artículo veremos como implementar una pantalla de bienvenida (splash screen) para nuestra aplicación. Lo haremos en Windows Forms (Visual Basic .NET 2008 / .NET Framework 3.5).

Seguramente muchas veces has visto que las aplicaciones muestran una pantalla de bienvenida antes de mostrar la pantalla real.

Aquí utilizaremos varias imágenes en una especie de carrusel, es decir una serie de imágenes apareciendo una tras otra en la pantalla de bienvenida automáticamente.

Para empezar hay que crear una aplicación Windows Forms llamada PantallaSplash.

Al formulario que se agrega automáticamente, hay que incorporar tres componentes: un ImageList (con el nombre imgPics), un Timer (tmrSplash) y un PictureBox (picBox) de la caja de herramientas.

En el control ImageList imgPics almacenaremos una o más imágenes. La configuración debe estar como la siguiente.

image

Con el control Timer controlaremos un intervalo de tiempo en que un evento se ejecute. Configura el timer como se ve en la siguiente imagen.

image

Y en el control PictureBox mostraremos una imagen. Configúralo de la siguiente manera (tienes que establecer una de las imágenes que pusimos en el control ImageList):

image

Asegúrate que el tamaño del control PictureBox tenga el mismo tamaño que se coloco en la propiedad ImageSize del control ImageList.

Escribamos el siguiente código que es el que hará el trabajo.

image

En el evento Load del formulario habilitamos el timer. Con la variable “index” vamos recorriendo la lista de imágenes y mostrándolas en el control PictureBox.

A continuación dejo el enlace para que puedan descargar el código (incluyo las imágenes que utilicé).

PantallaBienvenida.zip

Como Reducir el Tamaño del Log de Transacciones en SQL Server

Una pregunta muy común es cómo reducir el tamaño del log de transacciones en SQL Server 2008 o en versiones superiores, porque son instrucciones diferentes que las utilizadas para SQL Server 2000 o SQL Server 2005 .

Reducir el Log de Transacciones en SQL Server 2008

En este caso usaremos la base de datos AdventureWorks:

USE AdventureWorks

GO

ALTER DATABASE AdventureWorks

SET RECOVERY SIMPLE

GO

DBCC SHRINKFILE (AdventureWorks_Log)

GO

ALTER DATABASE AdventureWorks

SET RECOVERY FULL

GO

Recuerda que en este ejemplo la instrucción DBCC SHRINKFILE reduce el fichero de log al máximo (en el parámetro se le debe indicar el nombre lógico del fichero).

Reducir el Log de Transacciones en SQL Server 2000/2005

Primero ejecuta el siguiente código:

DBCC SHRINKFILE(pubs_log, 2)



Si no se obtiene el tamaño deseado, ejecute lo siguiente:





BACKUP LOG pubs WITH TRUNCATE_ONLY



Eso trunca el registro, sin posibilidad a una copia de seguridad.