繁体   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