[ Foro de C# ]

c#.net y sql server

16-May-2015 18:46
Invitado (naty)
6 Respuestas

Tengo un problema con c# al insertar un registro con fotos ya que me duplica los registros, probe usar el mismo comando para la misma tabla sin que contenga el campo imagen y funciona perfectamente,  probe otras dos maneras y  tambien con sp pero siempre con imagenes me duplica los registros.. este es el ultimo que use...


 private void agregarproductos()
          {             
              int stock = Convert.ToInt32(txbStock.Text);
              using (SqlConnection cn = Bdconexion.obtenerconeccion())
              {
                  SqlCommand agregar = cn.CreateCommand();
                  decimal costop = Convert.ToDecimal(costo.Text);
                  decimal preciov = Convert.ToDecimal(precioventa.Text);
                  string sql = "Insert into Productos(nombre,marca,modelo,ubicacion,stock,categoria,costo,precio_Venta,imagen,Descripcion)values('" + txtNombre.Text + "','" + txtMarca.Text + "','" + txbModelo.Text + "','" + txtubicacion.Text + "','" + txbStock.Text + "','" + txbCategoria.Text + "'," + costop + "," + preciov + ",@Imagen,'" + TxbDescripcion.Text + "')";
                  agregar.CommandText = sql;
                  agregar.Parameters.Add("@imagen", SqlDbType.Image);
                  MemoryStream ms = new MemoryStream();
                  Imagen.Image.Save(ms, ImageFormat.Jpeg);
                  agregar.Parameters["@imagen"].Value = ms.GetBuffer();
                  agregar.ExecuteNonQuery();
                  if (agregar.ExecuteNonQuery() >0)
                  {
                      MessageBox.Show("Datos guardados con exito");
                      VaciaCampos();
                      btnNuevo.Enabled = true;
                  }
                  else
                  {
                      MessageBox.Show("NO se guardaron los datos");
                  }
                  cn.Close();
              }
          }


 


18-May-2015 19:19
Nacho Cabanes (+83)

Pon aquí el "CREATE TABLE" que has usado, para ver cuál es tu clave primaria, porque quizá el problema esté ahí.


19-May-2015 14:51
Invitado (Naty)



CREATE TABLE [dbo].[Productos](
	[id] [int] IDENTITY(1,1) NOT NULL,
	[nombre] [varchar](50) NOT NULL,
	[marca] [varchar](50) NOT NULL,
	[modelo] [varchar](50) NOT NULL,
	[ubicacion] [varchar](50) NOT NULL,
	[stock] [int] NOT NULL,
	[categoria] [varchar](50) NOT NULL,
	[costo] [decimal](18, 2) NOT NULL,
	[precio_Venta] [decimal](18, 2) NOT NULL,
	[imagen] [image] NULL,
	[Descripcion] [varchar](50) NOT NULL,
 CONSTRAINT [PK_Productos] PRIMARY KEY CLUSTERED 
(
	[id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]

GO

SET ANSI_PADDING OFF
GO

ALTER TABLE [dbo].[Productos] ADD  DEFAULT (NULL) FOR [imagen]
GO


 


21-May-2015 09:53
Nacho Cabanes (+83)

Vale, entendido.

Un INSERT hace eso, inserta un nuevo en la base de datos, y falla si está repetido.

SI quieres reemplazarlo, deberías usar REPLACE en vez de INSERT, y deberías indicar el valor de la clave primaria, que es ID, para que quede claro qué registro quieres reemplazar.


21-May-2015 17:05
Invitado (naty)

pero si uso un solo insert... yo quiero ingresar regustros nuevos..... el tema que asi como esta me inserta dos veces el mismo registro....
pero probe creando una tabla igual solo que sin que guarde imagenes y en esa con el mismo comando me lo inserta correctamente (un solo registro) ....


25-May-2015 13:51
Nacho Cabanes (+83)

Entonces el problema no es de la consulta SQL, sino del código... vamos a ver...

Encontrado, mira:


agregar.ExecuteNonQuery(); 
if (agregar.ExecuteNonQuery() >0) ...


Llamas dos veces a "ExecuteNonQuery", de modo que insertas la ficha dos veces. Deberías hacer:


resultado = agregar.ExecuteNonQuery(); 
if (resultado >0) ...


 


26-May-2015 14:37
Invitado (naty)

:D  gracias genioooo! ahora anda perfecto






(No se puede continuar esta discusión porque tiene más de dos meses de antigüedad. Si tienes dudas parecidas, abre un nuevo hilo.)