[ Foro de C# ]
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();
}
}
Pon aquí el "CREATE TABLE" que has usado, para ver cuál es tu clave primaria, porque quizá el problema esté ahí.
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
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.
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) ....
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) ...
: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.)