Principales respuestas
Insertar datos de Datagridview en una tabla de Access

Pregunta
-
Hola buenos dias quisiera que me ayuden a desarollar el siguiente codigo que les voy a compartir. Lo que intento hacer es insertar filas de un datagridview sin estar enlazado a datos a una tabla de una base de datos en access
private void button3_Click_3(object sender, EventArgs e)
{//Cadena de conexion a la base de datos
OleDbConnection con = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\\StockControl\\DataStock.accdb");
//pruebo si la conexion se realizo
try
{
con.Open();
MessageBox.Show("Conexion establecida");
}
finally
{
}//realizo el insert a la tabla llamada Caja
for (int i = 0; i < GridCarro.Rows.Count - 1; i++)
{
OleDbCommand cmd = new OleDbCommand("INSERT INTO Caja (Detalle, Entrada, Fecha, Salida, Producto, Codigo)VALUES('"+GridCarro.Rows[i].Cells[0].Value+"','"+GridCarro.Rows[i].Cells[1].Value+"')", con);
con.Open();
cmd.ExecuteNonQuery();
con.Close();
GridCarro.Rows.Clear();
}
}Como veran ese es mi codigo pero cuando le hago click en el button no me hace nada ni tampo me da error. Quisiera saber que es lo que me esta faltando. Muchas gracias
- Editado JoacoFro viernes, 14 de febrero de 2020 11:54
Respuestas
-
hola
Porque usas la linea
GridCarro.Rows.Clear();
dentro del for ? de esta forma en la primer iteracion ya estas eliminando las rows que estas recorriendo, eso no tiene sentido
Tu codigo deberia ser como este
private void button3_Click_3(object sender, EventArgs e) { try { string connstring = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\\StockControl\\DataStock.accdb"; using(OleDbConnection con = new OleDbConnection(connstring)) { con.Open(); string query = "INSERT INTO Caja (Detalle, Entrada, Fecha, Salida, Producto, Codigo)VALUES(@detalle, @entrada, ....)"; OleDbCommand cmd = new OleDbCommand(query, con); for (var row in GridCarro.Rows) { cmd.Parameters.Clear(); cmd.Parameters.AddWithValue("@detalle", row.Cells[0].Value.ToString()); cmd.Parameters.AddWithValue("@entrada", row.Cells[1].Value.ToString()); //y el resto de los parametro ? cmd.ExecuteNonQuery(); } } } catch(Exception ex) { Messagebox.Show(ex.Message); } GridCarro.Rows.Clear(); }
pero alli veo que solo defines solo dos valores del insert y el resto ?
donde estan los valores para Fecha, Salida, Producto,etc
saludos
Leandro Tuttini
Blog
MVP Profile
Buenos Aires
Argentina- Propuesto como respuesta Pablo RubioModerator viernes, 14 de febrero de 2020 15:53
- Editado Leandro TuttiniMVP viernes, 14 de febrero de 2020 16:46
- Marcado como respuesta JoacoFro lunes, 17 de febrero de 2020 15:25
-
hola
ya edite el ejemplo y corregi el codigo
recuerda que debes asignar los parametros en el tipo de dato correcto, si el tipo de campo en la db es string entonces lo debes asignar con ese tipo, pero si es numerico debes convertir a ese tipo de dato
Leandro Tuttini
Blog
MVP Profile
Buenos Aires
Argentina- Editado Leandro TuttiniMVP viernes, 14 de febrero de 2020 16:47
- Marcado como respuesta Pablo RubioModerator viernes, 14 de febrero de 2020 18:09
Todas las respuestas
-
Hola buenos dias quisiera que me ayuden a desarollar el siguiente codigo que les voy a compartir. Lo que intento hacer es insertar filas de un datagridview sin estar enlazado a datos a una tabla de una base de datos en access
private void button3_Click_3(object sender, EventArgs e)
{//Cadena de conexion a la base de datos
OleDbConnection con = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\\StockControl\\DataStock.accdb");
//pruebo si la conexion se realizo
try
{
con.Open();
MessageBox.Show("Conexion establecida");
}
finally
{
}//realizo el insert a la tabla llamada Caja
for (int i = 0; i < GridCarro.Rows.Count - 1; i++)
{
OleDbCommand cmd = new OleDbCommand("INSERT INTO Caja (Detalle, Entrada, Fecha, Salida, Producto, Codigo)VALUES('"+GridCarro.Rows[i].Cells[0].Value+"','"+GridCarro.Rows[i].Cells[1].Value+"')", con);
con.Open();
cmd.ExecuteNonQuery();
con.Close();
GridCarro.Rows.Clear();
}
}Como veran ese es mi codigo pero cuando le hago click en el button no me hace nada ni tampo me da error. Quisiera saber que es lo que me esta faltando. Muchas gracias
hola joaco pon un punto de control en
cmd.ExecuteNonQuery();
ubica el puntero del cursor en cmd y mira que te muestra, ademas coloca el for todo el código en el try{
y trata de atrapar la excepción con un catch Exception e { MessageBox.Show("Error al insertar columna." +e);}
si quieres obtener la excepción de oledb utiliza OleDbException e
además te hacen falta columnas en el value para lo que expones en el insert
- Editado greg_dorian viernes, 14 de febrero de 2020 12:36
- Propuesto como respuesta Pablo RubioModerator viernes, 14 de febrero de 2020 15:53
-
hola
Porque usas la linea
GridCarro.Rows.Clear();
dentro del for ? de esta forma en la primer iteracion ya estas eliminando las rows que estas recorriendo, eso no tiene sentido
Tu codigo deberia ser como este
private void button3_Click_3(object sender, EventArgs e) { try { string connstring = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\\StockControl\\DataStock.accdb"; using(OleDbConnection con = new OleDbConnection(connstring)) { con.Open(); string query = "INSERT INTO Caja (Detalle, Entrada, Fecha, Salida, Producto, Codigo)VALUES(@detalle, @entrada, ....)"; OleDbCommand cmd = new OleDbCommand(query, con); for (var row in GridCarro.Rows) { cmd.Parameters.Clear(); cmd.Parameters.AddWithValue("@detalle", row.Cells[0].Value.ToString()); cmd.Parameters.AddWithValue("@entrada", row.Cells[1].Value.ToString()); //y el resto de los parametro ? cmd.ExecuteNonQuery(); } } } catch(Exception ex) { Messagebox.Show(ex.Message); } GridCarro.Rows.Clear(); }
pero alli veo que solo defines solo dos valores del insert y el resto ?
donde estan los valores para Fecha, Salida, Producto,etc
saludos
Leandro Tuttini
Blog
MVP Profile
Buenos Aires
Argentina- Propuesto como respuesta Pablo RubioModerator viernes, 14 de febrero de 2020 15:53
- Editado Leandro TuttiniMVP viernes, 14 de febrero de 2020 16:46
- Marcado como respuesta JoacoFro lunes, 17 de febrero de 2020 15:25
-
Muchas griacias por tu respuesta ya agregue los valores que faltaban del insert lo unico que me esta saliendo 2 errores en las siguientes lineas
OleDbCommand cmd = new OleDbCommand(, con);
El error en la linea de arriba es el siguiente: Falta un argumento
El error en la linea de arriba es el siguiente: "object" no contiene una definición para "Cells" ni un método de extensión accesible "Cells" que acepte un primer argumento del tipo "object" (¿falta alguna directiva using o una referencia de ensamblado?)cmd.Parameters.AddWithValue("@detalle", row.Cells[0].Value); cmd.Parameters.AddWithValue("@entrada", row.Cells[1].Value);
- Propuesto como respuesta Pablo RubioModerator viernes, 14 de febrero de 2020 18:09
-
hola
ya edite el ejemplo y corregi el codigo
recuerda que debes asignar los parametros en el tipo de dato correcto, si el tipo de campo en la db es string entonces lo debes asignar con ese tipo, pero si es numerico debes convertir a ese tipo de dato
Leandro Tuttini
Blog
MVP Profile
Buenos Aires
Argentina- Editado Leandro TuttiniMVP viernes, 14 de febrero de 2020 16:47
- Marcado como respuesta Pablo RubioModerator viernes, 14 de febrero de 2020 18:09