簡體   English   中英

SqlBulkCopy提供InvalidOperationException錯誤,我正在插入Null值,但表中的所有值都不為null

[英]SqlBulkCopy giving InvalidOperationException Error that I am inserting Null Values, but all values are non-null in the table

我有一個表,其中的字段之一是“ InDatabase”(SQL Server“位”類型),該表不允許為空。

我創建一個表並向其中添加幾百行,其中始終為InDatabase分配一個值(InDatabase指的是該行是否在另一個數據庫中)

當我調用SqlBulkCopy時,它給我一個InvalidOperationException錯誤,消息為:

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

每行都是這樣創建的:

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);

然后,在調用了大約300次以上之后,將調用SqlBulkCopy:

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

我在大約十二個其他表上使用了完全相同的格式,沒有問題。

好的,我可以使用它,但是並沒有真正弄清楚。 我將bulkCopy部分更改為此:

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);

不能確定為什么在不設置這樣的表映射的情況下我又進行了十幾次操作,但是由於某種原因,除非我執行上述操作,否則對於此表它將不起作用。

如果我正確理解您的問題...

我認為問題在於在c# .netSQL定義NULL值。 您的編程語言的NULL平均值在SQL中將不同。 在SQL中, System.DBNull類表示NULL值

只需檢查如何處理Null和DBNull

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM