SqlBulkCopy en tabla con clave primaria compuesta

.net c# sql sqlbulkcopy sql-server-2005

Pregunta

Estoy tratando de usar SqlBulkCopy para insertar nuevas filas en mi tabla de base de datos al rellenar manualmente un DataTable con mi aplicación.

Esto funciona bien para todas las tablas, excepto la tabla que tiene una clave primaria compuesta formada por 3 columnas . Cada vez que intento hacer SqlBulkCopy en esta tabla, aparece el siguiente error:

Violation of PRIMARY KEY constraint 'PK_MYCOMPOSITEKEY'. Cannot insert duplicate key in object 'dbo.MyTable'.
The statement has been terminated.

¿Es esto posible?

He intentado configurar las claves primarias de mi DataTable con lo siguiente:

dt.PrimaryKey = new[] {dt.Columns["PKcolumn1"], dt.Columns["PKcolumn2"], dt.Columns["PKcolumn3"]};

Pero de nuevo, no hay suerte.

Respuesta aceptada

El problema que tienes es con los datos.

En el archivo de entrada hay uno o ambos

una fila que tiene los mismos datos en las columnas e pk que ya tiene en la tabla

o

El archivo tiene al menos dos filas con los mismos valores de las columnas pk


Respuesta popular

Debería verificar sus datos en masa para las copias antes de llegar a la base de datos, el problema también podría estar allí (no solo chocando con una restricción existente, o registro en la base de datos). Funciona y generalmente es correcto reportarlo.

No obstante, todo el show de DataSet o incluso DataReaders es un ejercicio desordenado en las asignaciones, un diseño mal tipificado, un montón de transformaciones innecesarias, asignaciones, valores basados ​​en objetos [], y todo se convierte en orden, tipo y desorden dependiente de la cadena (algo solo MS Podría diseñar y sigue diseñando). Las interfaces masivas OLEDB nativas, por otro lado, son mucho más limpias.



Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué