elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Recuerda que debes registrarte en el foro para poder participar (preguntar y responder)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP)
| | | |-+  Programación Visual Basic (Moderadores: LeandroA, seba123neo)
| | | | |-+  Violation of PRIMARY KEY
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Violation of PRIMARY KEY  (Leído 1,507 veces)
stivcen

Desconectado Desconectado

Mensajes: 1


Ver Perfil
Violation of PRIMARY KEY
« en: 26 Enero 2021, 23:27 pm »

Tengo un error a la hora de agregar datos si inserto un numero en la parte de la tabla llamada código si es igual a uno anterior que ya había capturado me aparece un recuadro.

System.Data.SqlClient.SqlException: 'Violation of PRIMARY KEY constraint 'PK__MATERIAL__CC87E127D767918D'. Cannot insert duplicate key in object 'dbo.MATERIAL'. The duplicate key value is (0001).
Esta es la parte del código lo que quiero es que cuando ponga un numero repetido me arroje un recuadro que le diga al usuario que esta repetido e inserte otro diferente, espero y me puedan ayudar.

private void button1_Click(object sender, EventArgs e)
        {

            CONEXION.Conectar();

         
            string insertar = "INSERT INTO MATERIAL(CODIGO,NOMBRE,VALOR,VOLTAJE,CANTIDAD,UBICACION)VALUES(@CODIGO,@NOMBRE,@VALOR,@VOLTAJE,@CANTIDAD,@UBICACION)";
            SqlCommand cmd1 = new SqlCommand(insertar, CONEXION.Conectar());

            cmd1.Parameters.AddWithValue("@CODIGO", txtcodigo.Text);
            cmd1.Parameters.AddWithValue("@NOMBRE",txtnombre.Text);
            cmd1.Parameters.AddWithValue("@VALOR",txtvalor.Text);
            cmd1.Parameters.AddWithValue("@VOLTAJE",txtvoltaje.Text);
            cmd1.Parameters.AddWithValue("@CANTIDAD",txtcantidad.Text);
            cmd1.Parameters.AddWithValue("@UBICACION",txtubicacion.Text);         
            cmd1.ExecuteNonQuery();

            MessageBox.Show("Componente Agregado");
            dataGridView1.DataSource = llenar_grid();

        }


En línea

BlackZeroX
Wiki

Desconectado Desconectado

Mensajes: 3.158


I'Love...!¡.


Ver Perfil WWW
Re: Violation of PRIMARY KEY
« Respuesta #1 en: 27 Enero 2021, 04:31 am »

Esto va en .NET pero yo cuando quiero hacer inserts en hilos recurro a bloqueos de registros por BDD.

Deberías usar un consecutivo o algo similar (que funcione en hilos), o bloquear el registro (solo en updates)... en fin lo que debes hacer es validar si existe el registro antes de hacer el insert por que en la BDD ya existe, revisa la restriccion 'PK__MATERIAL__CC87E127D767918D' en tu BDD y revisa que campos ya se han ingresado.

Algo de código que yo uso en ocasiones para mitigar esto (En Oracle):

por ejemplo en Updates

Código
  1. DECLARE
  2.   CURSOR c1 IS SELECT empno, job, sal FROM emp FOR UPDATE;
  3. BEGIN
  4.   OPEN c1;
  5.   LOOP
  6.      FETCH c1 INTO bla bla bla
  7.      UPDATE emp
  8.      SET sal = new_sal
  9.      WHERE CURRENT OF c1;
  10.   END LOOP;
  11.   CLOSE c1;
  12. END;
  13.  

En cuanto a INSERTS

uso un insert con una subquery (Se requieren índices para que sea "rápida").

Código
  1. INSERT INTO A
  2. SELECT
  3.    'valor 1' AS campo1,
  4.    'valor 2' AS campo2,
  5.    'valor 3' AS campo3
  6. FROM DUAL
  7. WHERE NOT EXISTS (
  8.    SELECT * FROM A
  9.    WHERE A.campo1 = 'valor 1' AND A.campo2 = 'valor 2' AND A.campo2 = 'valor 2';
  10. )
  11.  

o con un MERGE (Emulando 1 tabla), (Se requieren índices para que sea "rápida").

Código
  1. MERGE INTO A target
  2. USING (
  3. SELECT
  4. 'valor 1' AS campo1,
  5. 'valor 2' AS campo2,
  6. 'valor 3' AS campo3
  7. FROM DUAL
  8. ) src
  9. ON target.campo1 = src.campo1, target.campo2 = src.campo2, target.campo3 = src.campo3
  10. WHEN MATCHED THEN
  11. UPDATE SET target.campo1 = 'valor 1', target.campo2 = 'valor 2', target.campo3 = 'valor 3'
  12. WHEN NOT MATCHED THEN
  13. INSERT (campo1, campo2, campo3)
  14. VALUES ('valor 1', 'valor 2', 'valor 2');
  15.  

Saludos.


« Última modificación: 27 Enero 2021, 04:35 am por BlackZeroX (Astaroth) » En línea

The Dark Shadow is my passion.
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Primary HackTool V3.0 - BenRu & Sergi « 1 2 3 4 »
Abril negro
BenRu 30 23,374 Último mensaje 9 Julio 2009, 17:21 pm
por Karcrack
Diferencia KEY y PRIMARY KEY
Bases de Datos
ma__tt 4 8,004 Último mensaje 24 Diciembre 2009, 22:27 pm
por ^Tifa^
Sharing Violation
Scripting
Fabiang 2 3,425 Último mensaje 16 Julio 2010, 20:32 pm
por Fabiang
error: expected primary-expression before ‘=’ token
Programación C/C++
YDOM 2 13,133 Último mensaje 18 Noviembre 2013, 03:45 am
por YDOM
Cambiar la ubicación de una columna con PRIMARY KEY
Bases de Datos
manwan 0 1,591 Último mensaje 2 Enero 2019, 03:22 am
por manwan
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines