Principales respuestas
método modificar

Pregunta
-
private void button5_Click_1(object sender, EventArgs e) { conexionbd conexion = new conexionbd(); conexion.abrir(); String connstring = "Data Source=PRACTICANTETI; Initial Catalog=Bascula3 ;Integrated Security=True"; using (SqlConnection conectarbd = new SqlConnection(connstring)) { conectarbd.Open(); string query; query = "UPDATE Entrada set Lote= @Lote, AvisoEmbarque= @AvisoEmbarque Contrato= @Contrato where Folio = @Folio "; /* query = "UPDATE Camion set PlacasCaja = @PlacasCaja, Modelo= @Modelo, NumeroEco=@NumeroEco, Placas= @Placas, Color=@Color, Transportadora=@Transportadora where Marca=@Marca "; query = "UPDATE Operadores set "; query = "UPDATE Proveedores set Concepto = @Concepto where Provee=@Provee"; query = "UPDATE Productos set Tipo= @Tipo, NTipo=@NTipo, Observaciones= @Observaciones where Producto = @Producto";*/ SqlCommand cmd = new SqlCommand(query, conectarbd); //entrada cmd.Parameters.AddWithValue("@Lote", loten.Text); cmd.Parameters.AddWithValue("@Folio", folioen.Text); cmd.Parameters.AddWithValue("@AvisoEmbarque", aviso.Text); cmd.Parameters.AddWithValue("@Contrato", contra.Text); //camion /*cmd.Parameters.AddWithValue("@Marca", marca.Text); cmd.Parameters.AddWithValue("@PlacasCaja", placaca.Text); cmd.Parameters.AddWithValue("@Modelo", modelo.Text); cmd.Parameters.AddWithValue("@NumeroEco", nume.Text); cmd.Parameters.AddWithValue("@Placas", placas.Text); cmd.Parameters.AddWithValue("@Color", color.Text); cmd.Parameters.AddWithValue("@Transportadora", trans.Text); //proveedor cmd.Parameters.AddWithValue("@Provee", provergi.Text); cmd.Parameters.AddWithValue("@Concepto", concepregis.Text); //producto cmd.Parameters.AddWithValue("@Producto", produc.Text); cmd.Parameters.AddWithValue("@Tipo", protipo.Text); cmd.Parameters.AddWithValue("@NTipo", numt.Text); cmd.Parameters.AddWithValue("@Observaciones", observa.Text); SqlDataReader leer = cmd.ExecuteReader();*/ if (leer.Read() == false) { MessageBox.Show("Datos Modificados Correctamente", "Se modifico la base de datos", MessageBoxButtons.OK, MessageBoxIcon.Asterisk); } else { MessageBox.Show("Los datos no se modificaron", "Error del sistema", MessageBoxButtons.OK, MessageBoxIcon.Error); } } }
Tengo este código para modificar datos, me funciona bien si lo hago tabla por tabla, pero necesito que sea en todas al mismo tiempo, alguien sabe que puedo hacer en este caso?
Respuestas
-
Si su motor de base de datos fuera SQL Server, le sugiero que haga un PROCEDIMIENTO y ejecute este, con las instrucciones necesarias.
IIslas Master Consultant SQL Server
-
Hola Katsa:
Si lo creas con un procedure tal que
create procedure modificarPlacas ( @Lote varchar(1000), @Folio varchar(1000), @AvisoEmbarque varchar(1000), @Contrato varchar(1000), @Marca varchar(1000), @PlacasCaja varchar(1000), @Modelo varchar(1000), @NumeroEco varchar(1000), @Placas varchar(1000), @Color varchar(1000), @Transportadora varchar(1000), @Provee varchar(1000), @Concepto varchar(1000), @Producto varchar(1000), @Tipo varchar(1000), @NTipo varchar(100), @Observaciones varchar(1000) ) as begin UPDATE Entrada set Lote= @Lote, AvisoEmbarque= @AvisoEmbarque, Contrato= @Contrato where Folio = @Folio; UPDATE Camion set PlacasCaja = @PlacasCaja, Modelo= @Modelo, NumeroEco=@NumeroEco, Placas= @Placas, Color=@Color, Transportadora=@Transportadora where Marca=@Marca; -- UPDATE Operadores set ---- aqui te falta la parte de la update UPDATE Proveedores set Concepto = @Concepto where Provee=@Provee; UPDATE Productos set Tipo= @Tipo, NTipo=@NTipo, Observaciones= @Observaciones where Producto = @Producto; end
Solo tienes que invocar una vez al procedure.
Nota revisa la update de entrada, porque falta una coma antes de Contrato.
Y la update de operadores no contiene que va a updatear.
Yo he puesto en el procedure los parámetros de un tamaño y tipo genérico. Esto debería de ser como serán en la base de datos las columnas a las que van a actualizar.
SqlConnection sqlcon = new SqlConnection(); var ConnectionString = @"Data Source = elSERVER; Initial Catalog = laBBDD; Integrated Security = True"; using (SqlConnection conn = new SqlConnection(ConnectionString)) { SqlCommand SqlCmd = new SqlCommand("nombreProcedure", conn); SqlCmd.CommandType = CommandType.StoredProcedure; SqlCmd.Parameters.AddWithValue("@Lote", .....); // y el resto de parámetros try { conn.Open(); SqlCmd.ExecuteNonQuery() ; } catch (Exception ex) { //loguear el error } }
- Marcado como respuesta Katsa miércoles, 19 de febrero de 2020 16:39
-
Muchas gracias, lo haré de esa manera, y si aun no contiene nada el de operadores, estoy componiendo todo el programa y hay cosas que faltan. ¿Me podrá ayudar con el método de insertar también?
Le adjunto el código aquí
Mi problema es que la persona que había hecho el programa anteriormente puso muchos botones para un solo formulario, y yo quiero que inserte mediante un solo botón, ya lo hace pero me manda muchos mensajes de que ya inserto en la base de datos y solo quiero que mande uno, pero al intentar que mande un mensaje solo toma la consulta en la que pongo esta linea de código: conectarbd.Ejecutar(consulta);
conectarbd.abrir(); consulta = "INSERT INTO Entrada (Folio,Lote,AvisoEmbarque,Contrato) values (" + Convert.ToInt32(folioen.Text) + ",'" + loten.Text + "'," + Convert.ToInt32(aviso.Text) + "," + Convert.ToInt32(contra.Text) + ");"; conectarbd.Ejecutar(consulta); consulta = "INSERT INTO Operadores (Nombre) values('" + textope.Text + "');"; conectarbd.Ejecutar(consulta); consulta = "INSERT INTO Camion (Marca, Modelo, Placas, Color,NumeroEco, PlacasCaja, Transportadora) values ('" + marca.Text + "','" + (modelo.Text) + "','" + (placas.Text) + "','" + color.Text + "','" + (nume.Text) + "','" + (placaca.Text) + "','" + trans.Text + "');"; conectarbd.Ejecutar(consulta); consulta = "INSERT INTO Proveedores (Provee,Concepto) values ('" + provergi.Text + "', '" + concepregis.Text + "');"; conectarbd.Ejecutar(consulta); consulta = "INSERT INTO Productos(Producto,Tipo,NTipo,Observaciones)values('" + produc.Text + "','" + protipo.Text + "'," + Convert.ToInt32(numt.Text) + ",'" + observa.Text + "');"; conectarbd.Ejecutar(consulta);
- Marcado como respuesta Katsa miércoles, 19 de febrero de 2020 16:39
-
Hola Katsa:
Si lo haces con un procedure, el código de c# es el mismo que antes. Solo cambias el nombre del procedure.
create procedure InsertarVarios ( @Lote varchar(1000) , @Folio INT , @Nombre varchar(1000) , @Marca varchar(1000) , @Modelo varchar(1000) , @Placas varchar(1000) , @Color varchar(1000) , @nume varchar(1000) , @placaca varchar(1000) , @trans varchar(1000) , @contra int , @aviso varchar(1000) , @provergi varchar(1000) , @concepregis varchar(1000) , @produc varchar(1000) , @protipo varchar(1000) , @numt int , @observa varchar(1000) ) as begin INSERT INTO Entrada (Folio,Lote,AvisoEmbarque,Contrato) values (@folio,@lote,@aviso,@contra); INSERT INTO Operadores (Nombre) values(@Nombre); INSERT INTO Camion (Marca, Modelo, Placas, Color,NumeroEco, PlacasCaja, Transportadora) values (@Marca,@Modelo,@Placas,@Color,@nume,@placaca,@trans); INSERT INTO Proveedores (Provee,Concepto) values (@provergi,@concepregis); INSERT INTO Productos(Producto,Tipo,NTipo,Observaciones) values (@produc,@protipo,@numt,@observa); end
Ten cuidado con los parámetros, que en el Sql yo te los he definido como algo que desconozco. No se si son varchar(1000) o nvarchar(200),.... o cualquier tipo de dato, y no se su tamaño.
SqlConnection sqlcon = new SqlConnection(); var ConnectionString = @"Data Source = elSERVER; Initial Catalog = laBBDD; Integrated Security = True"; using (SqlConnection conn = new SqlConnection(ConnectionString)) { SqlCommand SqlCmd = new SqlCommand("InsertarVarios", conn); SqlCmd.CommandType = CommandType.StoredProcedure; SqlCmd.Parameters.AddWithValue("@Lote", .....); // y el resto de parámetros try { conn.Open(); SqlCmd.ExecuteNonQuery() ; } catch (Exception ex) { //loguear el error } }
- Marcado como respuesta Katsa miércoles, 19 de febrero de 2020 18:02
-
Hola Katsa:
Según esa sentencia vas a poner en cada registro de operadores en la columna Nombre, lo que le pases como parámetro cuando nombre sea igual a lo que le pasas como parámetro.
Por tanto no hará nada.
Update operadores set Nombre = @Nombre Where algo que identifique los registros a cambiar
Si solo tienes una fila en operadores entonces le quitas el where.
Si tienes más filas, haz una select * from operadores, y busca algún criterio para determinar que filas quieres modificar.
Si aún mantienes dudas, pega aquí lo que te devuelve la consulta, y marca de alguna manera las que quieres modificar
- Marcado como respuesta Katsa miércoles, 19 de febrero de 2020 17:53
Todas las respuestas
-
Si su motor de base de datos fuera SQL Server, le sugiero que haga un PROCEDIMIENTO y ejecute este, con las instrucciones necesarias.
IIslas Master Consultant SQL Server
-
-
Hola Katsa:
Si lo creas con un procedure tal que
create procedure modificarPlacas ( @Lote varchar(1000), @Folio varchar(1000), @AvisoEmbarque varchar(1000), @Contrato varchar(1000), @Marca varchar(1000), @PlacasCaja varchar(1000), @Modelo varchar(1000), @NumeroEco varchar(1000), @Placas varchar(1000), @Color varchar(1000), @Transportadora varchar(1000), @Provee varchar(1000), @Concepto varchar(1000), @Producto varchar(1000), @Tipo varchar(1000), @NTipo varchar(100), @Observaciones varchar(1000) ) as begin UPDATE Entrada set Lote= @Lote, AvisoEmbarque= @AvisoEmbarque, Contrato= @Contrato where Folio = @Folio; UPDATE Camion set PlacasCaja = @PlacasCaja, Modelo= @Modelo, NumeroEco=@NumeroEco, Placas= @Placas, Color=@Color, Transportadora=@Transportadora where Marca=@Marca; -- UPDATE Operadores set ---- aqui te falta la parte de la update UPDATE Proveedores set Concepto = @Concepto where Provee=@Provee; UPDATE Productos set Tipo= @Tipo, NTipo=@NTipo, Observaciones= @Observaciones where Producto = @Producto; end
Solo tienes que invocar una vez al procedure.
Nota revisa la update de entrada, porque falta una coma antes de Contrato.
Y la update de operadores no contiene que va a updatear.
Yo he puesto en el procedure los parámetros de un tamaño y tipo genérico. Esto debería de ser como serán en la base de datos las columnas a las que van a actualizar.
SqlConnection sqlcon = new SqlConnection(); var ConnectionString = @"Data Source = elSERVER; Initial Catalog = laBBDD; Integrated Security = True"; using (SqlConnection conn = new SqlConnection(ConnectionString)) { SqlCommand SqlCmd = new SqlCommand("nombreProcedure", conn); SqlCmd.CommandType = CommandType.StoredProcedure; SqlCmd.Parameters.AddWithValue("@Lote", .....); // y el resto de parámetros try { conn.Open(); SqlCmd.ExecuteNonQuery() ; } catch (Exception ex) { //loguear el error } }
- Marcado como respuesta Katsa miércoles, 19 de febrero de 2020 16:39
-
Muchas gracias, lo haré de esa manera, y si aun no contiene nada el de operadores, estoy componiendo todo el programa y hay cosas que faltan. ¿Me podrá ayudar con el método de insertar también?
Le adjunto el código aquí
Mi problema es que la persona que había hecho el programa anteriormente puso muchos botones para un solo formulario, y yo quiero que inserte mediante un solo botón, ya lo hace pero me manda muchos mensajes de que ya inserto en la base de datos y solo quiero que mande uno, pero al intentar que mande un mensaje solo toma la consulta en la que pongo esta linea de código: conectarbd.Ejecutar(consulta);
conectarbd.abrir(); consulta = "INSERT INTO Entrada (Folio,Lote,AvisoEmbarque,Contrato) values (" + Convert.ToInt32(folioen.Text) + ",'" + loten.Text + "'," + Convert.ToInt32(aviso.Text) + "," + Convert.ToInt32(contra.Text) + ");"; conectarbd.Ejecutar(consulta); consulta = "INSERT INTO Operadores (Nombre) values('" + textope.Text + "');"; conectarbd.Ejecutar(consulta); consulta = "INSERT INTO Camion (Marca, Modelo, Placas, Color,NumeroEco, PlacasCaja, Transportadora) values ('" + marca.Text + "','" + (modelo.Text) + "','" + (placas.Text) + "','" + color.Text + "','" + (nume.Text) + "','" + (placaca.Text) + "','" + trans.Text + "');"; conectarbd.Ejecutar(consulta); consulta = "INSERT INTO Proveedores (Provee,Concepto) values ('" + provergi.Text + "', '" + concepregis.Text + "');"; conectarbd.Ejecutar(consulta); consulta = "INSERT INTO Productos(Producto,Tipo,NTipo,Observaciones)values('" + produc.Text + "','" + protipo.Text + "'," + Convert.ToInt32(numt.Text) + ",'" + observa.Text + "');"; conectarbd.Ejecutar(consulta);
- Marcado como respuesta Katsa miércoles, 19 de febrero de 2020 16:39
-
Hola Katsa:
Si lo haces con un procedure, el código de c# es el mismo que antes. Solo cambias el nombre del procedure.
create procedure InsertarVarios ( @Lote varchar(1000) , @Folio INT , @Nombre varchar(1000) , @Marca varchar(1000) , @Modelo varchar(1000) , @Placas varchar(1000) , @Color varchar(1000) , @nume varchar(1000) , @placaca varchar(1000) , @trans varchar(1000) , @contra int , @aviso varchar(1000) , @provergi varchar(1000) , @concepregis varchar(1000) , @produc varchar(1000) , @protipo varchar(1000) , @numt int , @observa varchar(1000) ) as begin INSERT INTO Entrada (Folio,Lote,AvisoEmbarque,Contrato) values (@folio,@lote,@aviso,@contra); INSERT INTO Operadores (Nombre) values(@Nombre); INSERT INTO Camion (Marca, Modelo, Placas, Color,NumeroEco, PlacasCaja, Transportadora) values (@Marca,@Modelo,@Placas,@Color,@nume,@placaca,@trans); INSERT INTO Proveedores (Provee,Concepto) values (@provergi,@concepregis); INSERT INTO Productos(Producto,Tipo,NTipo,Observaciones) values (@produc,@protipo,@numt,@observa); end
Ten cuidado con los parámetros, que en el Sql yo te los he definido como algo que desconozco. No se si son varchar(1000) o nvarchar(200),.... o cualquier tipo de dato, y no se su tamaño.
SqlConnection sqlcon = new SqlConnection(); var ConnectionString = @"Data Source = elSERVER; Initial Catalog = laBBDD; Integrated Security = True"; using (SqlConnection conn = new SqlConnection(ConnectionString)) { SqlCommand SqlCmd = new SqlCommand("InsertarVarios", conn); SqlCmd.CommandType = CommandType.StoredProcedure; SqlCmd.Parameters.AddWithValue("@Lote", .....); // y el resto de parámetros try { conn.Open(); SqlCmd.ExecuteNonQuery() ; } catch (Exception ex) { //loguear el error } }
- Marcado como respuesta Katsa miércoles, 19 de febrero de 2020 18:02
-
-
Hola Katsa:
Según esa sentencia vas a poner en cada registro de operadores en la columna Nombre, lo que le pases como parámetro cuando nombre sea igual a lo que le pasas como parámetro.
Por tanto no hará nada.
Update operadores set Nombre = @Nombre Where algo que identifique los registros a cambiar
Si solo tienes una fila en operadores entonces le quitas el where.
Si tienes más filas, haz una select * from operadores, y busca algún criterio para determinar que filas quieres modificar.
Si aún mantienes dudas, pega aquí lo que te devuelve la consulta, y marca de alguna manera las que quieres modificar
- Marcado como respuesta Katsa miércoles, 19 de febrero de 2020 17:53
-
Gracias tenia razón, ya me modifica bien los datos, ahora como hago para que se actualice la base de datos en mi método de búsqueda. Al insertar nuevos datos e intentar buscarlos me dice que no existen.
Es lo que tengo dentro del boton de busqueda
conexionbd conexion = new conexionbd(); conexion.abrir(); String connstring= "Data Source=PRACTICANTETI; Initial Catalog=Bascula3 ;Integrated Security=True"; using (SqlConnection conectarbd = new SqlConnection(connstring)) { conectarbd.Open(); //la busqueda la hace mediante el folio que registro anteriormente string query = "SELECT * FROM Camion INNER JOIN Operadores ON Camion.idCamiones = Operadores.idOperador inner join Productos ON Productos.idProducto = Operadores.idOperador INNER JOIN Proveedores ON Proveedores.idProveedor = Productos.idProducto inner join Entrada ON Entrada.idEntrada = Entrada.idEntrada where Folio = @Folio "; SqlCommand cmd = new SqlCommand(query, conectarbd); cmd.Parameters.AddWithValue("@Folio", bus.Text);
-
Buenas tardes en una pregunta anterior que hiciste el el foro sobre tu consulta
Te anexe esta misma imagen, que espero te sirva.
-
-
Mira en la consulta que muestras sigue habiendo errores por ello no de devuelve los datos.
Es lo que te explico en la imagen, estas definiendo una relación entre el idCamion y el idOperador. Dependiendo como este tu base de datos tu relacion debe ser Camion.idOperador = Operadores.idOperador o Operadores.idCamion = Camion.idCamion
INNER JOIN Operadores ON Camion.idCamiones = Operadores.idOperador
inner join Productos ON Productos.idProducto = Operadores.idOperador
INNER JOIN Proveedores ON Proveedores.idProveedor = Productos.idProducto
inner join Entrada ON Entrada.idEntrada = Entrada.idEntrada
Si me muestras un diagrama de tu base de datos similar al que te puse en la imagen podría ayudarte mejor.
-
No tengo en mi poder ningún diagrama parecido, y la persona que estaba desarrollando no dejo nada, parecido y el data set esta mal, ademas, no me habia dado cuenta pero no dejo tablas relacionadas. Creo que lo mejor será empezar desde 0 y hacer bien las cosas. Cualquier duda que tenga espero me puedan ayudar a resolverla.
-
Pero puedes dibujarlo con Visio , power point, o cualquier otro programa. Te recomiendo hacer tu diagrama e incluso ponerle no solo el nombre de los campos si no también el tipo. Te va a ayudar mucho a la hora de programar.
Coincido contigo, comienza arreglando la base de datos desde 0.
-
-
-
-
SELECT Folio, AvisoEmbarque,Contrato,Lote,Nombre,Marca,PlacasCaja,Modelo,NumeroEco,Placas,Color,Transportadora, Concepto,Provee,Producto,Tipo,NTipo,Observaciones
FROM
Entrada LEFT JOIN Productos ON Entrada.idEntrada = Productos.idEntrada
LEFT JOIN Proveedores ON Productos.idProducto=Proveedores.idProducto
LEFT JOIN Camion ON Proveedores.idProveedor= Camion.idProveedores
LEFT JOIN Operadores ON Camion.idCamiones = Operadores.idCamion;Si tengo relacionadas las tablas, pero cuando intento buscar los datos, solo me salen los de la tabla entrada.
Que puedo hacer en este caso?
-
Hola Katsa:
Creo que la pregunta ya se sale del tema que iniciaste este hilo.
Porque no lo preguntas en un hilo nuevo, y además de pegar la consulta, que esta bien formada, y parece buena, porque no pegas alguna fila de los resultados que esperas obtener, porque ya te indico, que la consulta a priori es buena.
Otra cosa, es las columnas, porque de la consulta no podemos saber a que tabla pertenecen.
-