我有一个表,其中一个字段是“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
我在十几个其他表上使用这种完全相同的格式,没有问题。
答案 0 :(得分:1)
好的,我让它上班,但并没有真正弄明白。我将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);
不确定为什么在没有设置像这样的表映射的情况下执行此操作的其他十几次,但由于某种原因,使用此表,除非我执行上述操作,否则它将无法工作。
答案 1 :(得分:0)
如果我理解你的问题......
我认为问题是在NULL
和c# .net
中定义SQL
值。 SQL编程语言NULL
的平均值不一样。
在SQL中,NULL值由System.DBNull Class
只需查看如何Handle Null and DBNull