SqlBulkCopy da el error InvalidOperationException que estoy insertando valores nulos, pero todos los valores no son nulos en la tabla

asp.net c# sqlbulkcopy

Pregunta

Tengo una tabla donde uno de los campos es "InDatabase" (tipo de "bit" de SQL Server) que no permite nulos.

Creo una tabla y le agrego unos cientos de filas, donde a InDatabase siempre se le asigna un valor (InDatabase se refiere a si la fila está en otra base de datos)

Cuando llamo a SqlBulkCopy, me está dando un Error de excepción de excepción de operación, con el mensaje de:

"Column 'InDatabase' does not allow DBNull.Value."

Cada fila se crea como tal:

ProductionDatabaseDataSet.EntriesV2Row NewRow = this.InsertTable.NewEntriesV2Row();

NewRow.MeetEntryID = MeetEntryID;
NewRow.EventID = EventID;
NewRow.MeetID = MeetID;
NewRow.AthleteID = AthleteID;
NewRow.Exhibition = Exhibition;
NewRow.Bonus = Bonus;
NewRow.EnterEvent = true;
NewRow.InDatabase = true;
if (AutoTime != null)
    NewRow.AutoTime = AutoTime ?? -1;
if (CustomTime != null)
    NewRow.CustomTime = CustomTime ?? -1;

this.InsertTable.AddEntriesV2Row(NewRow);

Luego, una vez que se llama a lo anterior alrededor de 300 veces, se llama a la SqlBulkCopy:

SqlBulkCopy bulkCopy = new SqlBulkCopy(this.Connection.ConnectionString);
bulkCopy.DestinationTableName = this.Adapter.TableMappings[0].DataSetTable;
            bulkCopy.BatchSize = BatchSize;
bulkCopy.WriteToServer(InsertTable); //Throwing the error

Utilizo este mismo formato exacto en una docena de otras tablas sin ningún problema.

Respuesta aceptada

OK, lo tengo para trabajar, pero realmente no lo resolví. Cambié la sección bulkCopy a esto:

bulkCopy.DestinationTableName = this.Adapter.TableMappings[0].DataSetTable;
for (int i = 0; i < this.Adapter.TableMappings[0].ColumnMappings.Count; i++)
    bulkCopy.ColumnMappings.Add(new SqlBulkCopyColumnMapping(
                this.Adapter.TableMappings[0].ColumnMappings[i].SourceColumn.ToString(),
                this.Adapter.TableMappings[0].ColumnMappings[i].DataSetColumn.ToString()));
bulkCopy.BatchSize = BatchSize;


bulkCopy.WriteToServer(InsertTable);

No estoy seguro de por qué la docena de otras veces hice esto sin configurar las asignaciones de tablas como esta, pero por alguna razón, con esta tabla, no funcionará a menos que haga lo anterior.


Respuesta popular

Si entendiera tu problema correctamente ...

Creo que el problema es definir el valor NULL en c# .net y SQL . La media de NULL de su lenguaje de programación no será la misma en SQL. En SQL, el valor NULL representado por System.DBNull Class

Solo verifica como manejar Null y DBNull



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é