Insertar SqlBulkCopy con columna de identidad

Estoy usando el objeto SqlBulkCopy para insertar un par de millones de filas generadas en una base de datos. El único problema es que la tabla en la que estoy insertando tiene una columna de identidad. Intenté configurar SqlBulkCopyOptions en SqlBulkCopyOptions.KeepIdentity y estableciendo la columna de identidad en 0 , DbNull.Value y null . Ninguno de los cuales ha funcionado. Siento que me estoy perdiendo algo bastante simple, si alguien pudiera iluminarme eso sería fantástico. ¡Gracias!

editar Para aclarar, no tengo los valores de identidad establecidos en la DataTable que estoy importando. Quiero que se generen como parte de la importación.

edit 2 Aquí está el código que uso para crear el objeto base SqlBulkCopy .

 SqlBulkCopy sbc = GetBulkCopy(SqlBulkCopyOptions.KeepIdentity); sbc.DestinationTableName = LOOKUP_TABLE; private static SqlBulkCopy GetBulkCopy(SqlBulkCopyOptions options = SqlBulkCopyOptions.Default) { Configuration cfg = WebConfigurationManager.OpenWebConfiguration("/RSWifi"); string connString = cfg.ConnectionStrings.ConnectionStrings["WifiData"].ConnectionString; return new SqlBulkCopy(connString, options); } 

Para que la tabla de destino asigne la identidad, no use la opción SqlBulkCopyOptions.KeepIdentity . En su lugar, no asigne la identidad de la fuente y no la extraiga de la fuente para enviarla a SqlBulkCopy .

Rellene la ColumnMapping de BulkCopy objeto BulkCopy y no BulkCopy la columna de identidad. La columna de identidad será generada por la base de datos de destino.

Tienes dos opciones –

1 – use KeepIdentity y preserve los valores de Identity la fuente.

2 – No mapea el campo Identity . Si no intentas asignar un valor, la tabla objective asignará uno automáticamente.

Sí, tiene razón al usar la opción SqlBulkCopyOptions.KeepIdentity , entonces bulkcopy writer no cree que la estructura de la tabla presente este objeto desde la columna de inicio, por lo que para nuestra necesidad, estoy haciendo lo mismo para preservar el campo de identidad en mi tabla. tiene que hacer una columna adicional en su objeto de tabla de datos con el rest de sus columnas necesarias y pasar valores nulos a esta columna, luego la tabla maneja automáticamente Identidad.

Causa : – Había algunas filas vacías en Excel al final de los datos, que posiblemente parezcan filas en blanco. La carga masiva intentaba cargar estas filas en blanco en la tabla.

Solución : seleccione solo las filas que contienen datos, copie los datos en la hoja nueva. Supongamos que tiene sus datos en la “Hoja 1”, muévalos a la “Hoja 2” y elimine “Hoja 1”.

En mi caso, resultó ser un espacio en blanco dentro del nombre de la columna y en una de las columnas había usado accidentalmente hyphon (-) en lugar de subrayado (_) en mi tabla SQL. Reemplacé el espacio en blanco e hyphon con guión bajo en la tabla sql y solucionó el problema.