C sharp - No sé hacer un UPDATE sobre una DB Access

 
Vista:

No sé hacer un UPDATE sobre una DB Access

Publicado por Asran (4 intervenciones) el 27/07/2008 20:29:27
Como el titulo pretende ilustrar, no soy capaz de conseguir hacer un UPDATE. Hago INSERTs y DELETEs sin problemas, pero el UPDATE no me chuta. La idea es que cuando la ID de la fila que quiero introducir coincida con la ID de una fila ya existente (o sea, primary key repetida), en lugar de hacer un insert me haga un update. La excepción la controlo bien y tal y dentro del catch va el siguiente codigo:

OleDbConnection BD = new OleDbConnection();
OleDbCommand orden;

BD.ConnectionString = "path de mi bd";
string strOrden = "Update tabla set COL=@COL where ID=@ID";
orden = new OleDbCommand(strOrden, BD);
orden.Parameters.Add(new OleDbParameter("@ID", OleDbType.VarWChar, 50));
orden.Parameters["@ID"].Value = textBoxID.Text;
orden.Parameters.Add(new OleDbParameter("@COL", OleDbType.VarWChar, 50));
orden.Parameters["@COL"].Value = textBoxCOL.Text;
orden.Connection.Open();
int filasAfectadas = orden.ExecuteNonQuery();
MessageBox.Show(filasAfectadas.ToString());
orden.Connection.Close();

Y no me va. No hay ni excepción ni nada. Simplemente el filasAfectadas es igual a 0 y obviamente en la BD no se ve ningún cambio. En cambio si de la misma forma, en lugar de hacer un UPDATE hago un DELETE cambiando el strOrden por este otro

string strOrden = "Delete from tabla where ID=@ID"

funciona perfectamente.

A alguien se le ocurre a que puede ser debido?
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:No sé hacer un UPDATE sobre una DB Access

Publicado por Asran (4 intervenciones) el 28/07/2008 10:51:44
Vale, ya he descubierto lo que pasaba.
Resulta que el orden en que añades los parametros a la "orden" influye. Tiene que ser el mismo en el que aparecen en la instrucción (strOrden).

Así pues este codigo funciona simplemente poniendo las filas

orden.Parameters.Add(new OleDbParameter("@COL", OleDbType.VarWChar, 50));
orden.Parameters["@COL"].Value = textBoxCOL.Text;

por delante de las filas

orden.Parameters.Add(new OleDbParameter("@ID", OleDbType.VarWChar, 50));
orden.Parameters["@ID"].Value = textBoxID.Text;

Un saludo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:No sé hacer un UPDATE sobre una DB Access

Publicado por Ma de Jesus  (4 intervenciones) el 09/09/2008 04:03:39
Ho0la!!

Bueno yo tengo una forma mas sencilla de hacerlo y con menos código. Te explico, cuando manejas una base de datos lo primordial es un Id, el cual sugiero sea autonumerico. Bueno en base a esto puede hacer la conexion a la base de datos( la tabla en especifico) y realizar los cambios en la base deacuerdo al id del registro afectado.

conexionDatos.Open();
OleDbCommand com=new OleDbCommand(cadComandoSQL,conexionDatos);
com.CommandText = "UPDATE (nom_tabla) SET ENVIO=" + textBox1.Text + ", RECEPCION=" + textBox2.Text + ", RESISTENCIA='" + textBox3.Text + "', REACTANCIA='" + textBox4.Text + "', ADMITANCIA='" + textBox5.Text + "' WHERE Id=" + IdREG;
try
{
com.ExecuteNonQuery();
MessageBox.Show("Base de Datos actualizada", "Mensaje del sistema", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
conexionDatos.Close();
}
catch
{
MessageBox.Show("Error al intentar añadir datos", "Mensaje del sistema", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
}

donde:

ENVIO, RECEPCION, RESISTENCIA son los nombre de los campos de mi tabla.

Espero te sea de ayuda...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:No sé hacer un UPDATE sobre una DB Access

Publicado por Milson Cardona (1 intervención) el 17/02/2010 16:03:43
este codigo, me parece inseguro porque se presta para la inyeccion de código desde el mismo textbox donde recoges los datos del usuario.

como buena práctica siempre es mejor trabajar con DBPARAMETER. las buenas cosas necesitan de un poco de esfuerzo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar