insercion masiva de datos

20/03/2010 - 18:37 por jdepaz | Informe spam
Hola lista,

De un recibo de pago, el detalle de los pagos se agregan en un
ListView en C#,

por ejemplo:


TIPO DESCRIPCION CANTIDAD
EFECTIVO EN EFECTIVO 100.00
DOLARES 1 X 8 80.00
CHEQUE BANCO INDUSTRIAL -1234- 100.00


y la tabla:

CREATE TABLE tbl_10
(
tbl_08_no numeric(11) NOT NULL,
tbl_10_fpago character varying(15) NOT NULL,
tbl_10_desc character varying(50) NOT NULL,
tbl_10_cant numeric(10,2) NOT NULL
)


y para la insercion en la BD (PostgreSQL 8.4.3), tengo lo siguiente:

public void guardaDatosDetalle(Int32 iRecibo)
{
string query =@"INSERT INTO tbl_10
VALUES(@NoRecibo,@FPago,@Desc,@Cant);";
NpgsqlCommand cmd = new
NpgsqlCommand(query,CnnRecibo.getConexion());

for (int filas=0;filas<=listaDetalle.Items.Count-1;filas+
+) //ciclo for para recorrer el ListView1
{
cmd.Parameters.AddWithValue("@NoRecibo",iRecibo);
cmd.Parameters.AddWithValue("@FPago",
listaDetalle.Items[filas].SubItems[0].Text);
cmd.Parameters.AddWithValue("@Desc",
listaDetalle.Items[filas].SubItems[1].Text);
cmd.Parameters.AddWithValue("@Cant",
listaDetalle.Items[filas].SubItems[2].Text);
try
{
cmd.ExecuteNonQuery();
}
catch (NpgsqlException ex)
{
PoneMensaje(ex.Message);
}
}
}



Ahora mas que todo, un CONSEJO Y OBSERVACION respecto a lo planteado
anteriormente, ya que según he buscado información, existen
ejemplos de inserción masiva de datos para SQL Server.

O quizas estoy haciendolo de forma incorrecta, de pronto tendria que
hacerlo con un Stored Procedure (Function en PostgreSQL)
 

Leer las respuestas

#1 Leandro Tuttini
20/03/2010 - 21:14 | Informe spam
hola

en principio el codigo pareceria estar bien, pero detecto algo un poco
raro

si puedes hacer uso de procedimiento en tu db seria aun mejor,
igualmente un detalle, noto que el objeto NpgsqlCommand no es
reconstruido por cada cilo del listview, esto hace que los parametros
se pisen, o se agreguen incorrectamente, o es ams me parecio raro que
no lance un error, cuando se inserta el mismo parametro ams de una vez


algo como esto

public void guardaDatosDetalle(Int32 iRecibo)
{
string query = @"INSERT INTO tbl_10 VALUES(@NoRecibo, @FPago, @Desc,
@Cant);";

try
{
foreach(listViewItem item in listaDetalle.Items)
{
using(NpgsqlCommand cmd = new
NpgsqlCommand(query,CnnRecibo.getConexion()))
{
cmd.Parameters.AddWithValue("@NoRecibo",iRecibo);
cmd.Parameters.AddWithValue("@FPago",item.SubItems[0].Text);
cmd.Parameters.AddWithValue("@Desc",item.SubItems[1].Text);
cmd.Parameters.AddWithValue("@Cant",item.SubItems[2].Text);

cmd.ExecuteNonQuery();
}
}
}
catch (NpgsqlException ex)
{
PoneMensaje(ex.Message);
}

}


saludos

Preguntas similares