[英]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# .net
和SQL
定義NULL
值。 您的編程語言的NULL
平均值在SQL中將不同。 在SQL中, System.DBNull類表示NULL值
只需檢查如何處理Null和DBNull
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.