Realizar operaciones por lotes mediante (ADO.NET)

28/03/2008 - 20:57 por Napoleon | Informe spam
Saludos,

La cuestion es que deseo grabar registros en bloque es decir,,, que se
digita una factura y por ende su detalle,, al grabar la cabeza no hay
problema,, pues se dispara la intrucion de insercion y ya tengo generado la
cabeza de la factura, el problema surge al grabar el detalle, pues tengo que
barrer fila por fila y eso inplica que a todo momento se va a la bbdd
(conecta y desconecta) y si me surge un error en la insercion en una fila
intermedia tendria que hacer una rutina para borrar los registros anteriores
a la fila y a la cabeza,,,

yo trabajo esclusivamente con procedimientos almacenados es decir tengo un
sp, par insertar cabeza y un para detalle, lo que deseo es cargar la rutina
de insercion en una especie de bloque o algo parecido y hacer un solo
conectado y desconectado a la base de datos
Porfavor podrian darme una guia de como poder hacer esto, y si me pueden
ayudar con un ejemplo o documentacion para poder realizar este proceso

Gracias
 

Leer las respuestas

#1 Alberto Poblacion
29/03/2008 - 10:09 | Informe spam
"Napoleon" wrote in message
news:
La cuestion es que deseo grabar registros en bloque es decir,,, que se
digita una factura y por ende su detalle,, al grabar la cabeza no hay
problema,, pues se dispara la intrucion de insercion y ya tengo generado
la
cabeza de la factura, el problema surge al grabar el detalle, pues tengo
que
barrer fila por fila y eso inplica que a todo momento se va a la bbdd
(conecta y desconecta) y si me surge un error en la insercion en una fila
intermedia tendria que hacer una rutina para borrar los registros
anteriores
a la fila y a la cabeza,,,

yo trabajo esclusivamente con procedimientos almacenados es decir tengo un
sp, par insertar cabeza y un para detalle, lo que deseo es cargar la
rutina
de insercion en una especie de bloque o algo parecido y hacer un solo
conectado y desconectado a la base de datos
Porfavor podrian darme una guia de como poder hacer esto, y si me pueden
ayudar con un ejemplo o documentacion para poder realizar este proceso



Para llamar a dos procedimientos almacenados con una sola apertura de
conexión, no tienes más que abrir la conexión, llamar a uno detrás de otro,
y luego cerrarla, por ejemplo, usando para ello un bloque "using":

using (SqlConnectin cn = new SqlConnection(cadena))
{
cn.Open();
SqlCommand cmd = new SqlCommand("Proc1", cn);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add.
cmd.ExecuteNonQuery();
cmd = new SqlCommand("Proc2", cn);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add.
cmd.ExecuteNonQuery();
}

Si lo que quieres es que, si falla una de las llamadas, se deshaga la
operación completa, lo que te interesa es usar una transacción:

using (SqlConnectin cn = new SqlConnection(cadena))
{
cn.Open();
SqlTransaction trans = cn.BeginTransaction();
try
{
SqlCommand cmd = new SqlCommand("Proc1", cn);
cmd.Transaction = trans;
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add.
cmd.ExecuteNonQuery();
cmd = new SqlCommand("Proc2", cn);
cmd.Transaction = trans;
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add.
cmd.ExecuteNonQuery();
trans.Commit();
}
catch
{
trans.RollBack();
throw;
}
}

Preguntas similares