como ejecuto scripts SQL que contienen "GO" con OdbcCommand u otro

13/08/2008 - 23:06 por Mauro SB | Informe spam
HOla, como puedo hacer para ejecutar desde una aplicacion winform un script
sql que contiene sentencias GO, que no son interpretadas por ODBC, se que
alguna vez lo hice en VB6 pero no encuentro la forma en .net.
no quiero tener que utilizar el isql o parecidos. ya que quiero tener el
control de la salida del script.
muchas gracias!!!

Preguntas similare

Leer las respuestas

#1 Jesús López
14/08/2008 - 12:03 | Informe spam
Tienes que parsear el script, el GO es un separador de procesos por lotes
así que tienes que separarlos tú mismo y enviarlos separadamente a SQL
Server. No puedes enviar el script completo a SQL Server.


Este fragmento de código es un muy simplista, pero da una idea de lo que hay
que hacer:

string script = ReadScriptFormFile("MyScript.sql");
string[] batches = script.Split("GO");
foreach (string batch in baches)
{
cmd.CommandText = batch;
cmd.ExecuteNonQuery();
}

El parseo no va a ser tan simple como un Split, y probablemente tengas que
usar ExecuteReader y IDataReader.NextResult..

Saludos:

Jesús López
www.solidq.com






"Mauro SB" escribió en el mensaje
news:
HOla, como puedo hacer para ejecutar desde una aplicacion winform un
script
sql que contiene sentencias GO, que no son interpretadas por ODBC, se que
alguna vez lo hice en VB6 pero no encuentro la forma en .net.
no quiero tener que utilizar el isql o parecidos. ya que quiero tener el
control de la salida del script.
muchas gracias!!!
Respuesta Responder a este mensaje
#2 Mauro SB
14/08/2008 - 15:07 | Informe spam
Gracias!!!, lo hice con una regular expresion, funciona biendejo el codigo
por si alguien lo necesita:

StreamReader reader = new StreamReader(dir.FullName + "\\" + s.File);
SQLScript = reader.ReadToEnd();

Regex regex = new Regex(@"\bgo\b",
RegexOptions.IgnoreCase);

foreach (string sqlcommand in
regex.Split(SQLScript))
{
sqlcom.CommandText = sqlcommand;

if (!string.IsNullOrEmpty(sqlcom.CommandText))
{
datareader = sqlcom.ExecuteReader();
while (!datareader.IsClosed)
{
DataTable Results = new DataTable();
Results.Load(datareader,
LoadOption.OverwriteChanges);
if
(string.IsNullOrEmpty(Results.TableName))
{
Results.TableName =
"No_table_Name";
}
PrintColumns(Results);
}
datareader.Close();

}

}

"Jesús López" wrote:

Tienes que parsear el script, el GO es un separador de procesos por lotes
así que tienes que separarlos tú mismo y enviarlos separadamente a SQL
Server. No puedes enviar el script completo a SQL Server.


Este fragmento de código es un muy simplista, pero da una idea de lo que hay
que hacer:

string script = ReadScriptFormFile("MyScript.sql");
string[] batches = script.Split("GO");
foreach (string batch in baches)
{
cmd.CommandText = batch;
cmd.ExecuteNonQuery();
}

El parseo no va a ser tan simple como un Split, y probablemente tengas que
usar ExecuteReader y IDataReader.NextResult..

Saludos:

Jesús López
www.solidq.com






"Mauro SB" escribió en el mensaje
news:
> HOla, como puedo hacer para ejecutar desde una aplicacion winform un
> script
> sql que contiene sentencias GO, que no son interpretadas por ODBC, se que
> alguna vez lo hice en VB6 pero no encuentro la forma en .net.
> no quiero tener que utilizar el isql o parecidos. ya que quiero tener el
> control de la salida del script.
> muchas gracias!!!



Respuesta Responder a este mensaje
#3 Mauro SB
14/08/2008 - 16:38 | Informe spam
Jesus!!!!, ya solucione lo del go, pero ahora parece que por alguna causa me
esta tirando error de sintaxis (near begin) lo siguiente:

/********************
**descripcion del sp **
********************/
create procedure spalgo
@var int
as
begin
.
.
.
end

si pongo un go entre el comment y el create lo crea bienpero quiero
tener la descripcion incluida, desde un query analyzer no tengo porblemas
para correrlo.
espero que puedas ayudarme

saludos!

"Jesús López" wrote:

Tienes que parsear el script, el GO es un separador de procesos por lotes
así que tienes que separarlos tú mismo y enviarlos separadamente a SQL
Server. No puedes enviar el script completo a SQL Server.


Este fragmento de código es un muy simplista, pero da una idea de lo que hay
que hacer:

string script = ReadScriptFormFile("MyScript.sql");
string[] batches = script.Split("GO");
foreach (string batch in baches)
{
cmd.CommandText = batch;
cmd.ExecuteNonQuery();
}

El parseo no va a ser tan simple como un Split, y probablemente tengas que
usar ExecuteReader y IDataReader.NextResult..

Saludos:

Jesús López
www.solidq.com






"Mauro SB" escribió en el mensaje
news:
> HOla, como puedo hacer para ejecutar desde una aplicacion winform un
> script
> sql que contiene sentencias GO, que no son interpretadas por ODBC, se que
> alguna vez lo hice en VB6 pero no encuentro la forma en .net.
> no quiero tener que utilizar el isql o parecidos. ya que quiero tener el
> control de la salida del script.
> muchas gracias!!!



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