En algunas ocasiones puede ser necesario lanzar scripts sql complejos contra nuestro servidor Sql Server. Estos scripts la mayoría de la veces contienes la palabra GO. Si usamos el método ExecuteNonQuery veremos que nuestro script no se ejecuta correctamente ya que este detiene la ejecución al encontrarse con el primer GO.
La solución en este caso es usar el objeto Server. El código es realmente simple
[sourcecode language='c#']ServerConnection serverConnection = null;
string sql = “
SqlConnection sqlConnection = new SqlConnection(”
serverConnection = new ServerConnection(sqlConnection);
Server server = new Server(serverConnection);
server.ConnectionContext.ExecuteNonQuery(sql);
[/sourcecode]
Si lo queremos hacer transaccional usaremos
[sourcecode language='c#']ServerConnection serverConnection = null;
try
{
string sql = “
SqlConnection sqlConnection = new SqlConnection(”
serverConnection = new ServerConnection(sqlConnection);
serverConnection.BeginTransaction();
Server server = new Server(serverConnection);
server.ConnectionContext.ExecuteNonQuery(sql);
serverConnection.CommitTransaction();
}
catch (Exception ex)
{
serverConnection.RollBackTransaction();
MessageBox.Show(ex.Message);
}
[/sourcecode]
Sólo falta añadir que tendremos que hacer uso de la librerias
[sourcecode language='c#']using Microsoft.SqlServer.Management.Common;
using Microsoft.SqlServer.Management.Smo;
[/sourcecode]
Saludos.

October 1st, 2008 5:28 PM
Hola!!
Esta muy bueno tu post pero tengo una duda. ¿Como hago para pasarle parametros al script sql? Es que quiero hacer un script para generar usuarios sql en mi bd y al ejecutarlo pasarle la info de la clave y el usuario. Por favor si la respuesta me la puedes enviar a mi correo te lo agradeceria.
Saludos!!
October 2nd, 2008 10:18 AM
Hola Juan, no entiendo muy bien la pregunta. No se a que le quieres pasar parametros. Dame un ejemplo de lo que quieres hacer y buscamos una solución…
October 30th, 2008 10:51 AM
Supongo que está confundiendo procedimiento almacenado con script SQL.
AddWithValues() y todo esto, para pasar parámetros a un procedimiento almacenado.
October 30th, 2008 10:57 AM
Hola Luix, con script SQL me refiero a un secuencia de sentencias T-SQL. Un caso típico es la instalación de nuestra aplicación donde tenemos que crear tablas, procedimiento almacenados, insertar valores fijos. Me refiero a algo tipo
CREATE TABLE…
GO
INSERT INTO…
INSERT INTO…
INSERT INTO…
GO
CREATE PROCEDURE…
GO
Y todo esto lo tenemos en un fichero y lo queremos ejecutar en nuestros servidor de base de datos.
March 12th, 2009 11:52 PM
Hola.
Tengo la misma duda que el otro juan, en mi caso, deseo pasarle a ese script el nombre de la base de datos que voy a crear.