Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/289.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# SqlBulkCopy给出InvalidOperationException错误,即我正在插入空值,但表中的所有值都不是空值_C#_Asp.net_Sqlbulkcopy - Fatal编程技术网

C# SqlBulkCopy给出InvalidOperationException错误,即我正在插入空值,但表中的所有值都不是空值

C# SqlBulkCopy给出InvalidOperationException错误,即我正在插入空值,但表中的所有值都不是空值,c#,asp.net,sqlbulkcopy,C#,Asp.net,Sqlbulkcopy,我有一个表,其中一个字段是“InDatabase”(SQL Server“bit”类型),它不允许空值 我创建了一个表并向其中添加了几百行,其中InDatabase总是被赋值(InDatabase指的是该行是否在另一个数据库中) 当我调用SqlBulkCopy时,它会给我一个InvalidOperationException错误,消息为: "Column 'InDatabase' does not allow DBNull.Value." 每一行都是这样创建的: ProductionDatab

我有一个表,其中一个字段是“InDatabase”(SQL Server“bit”类型),它不允许空值

我创建了一个表并向其中添加了几百行,其中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

我在其他十几张表上使用了完全相同的格式,没有问题。

如果我正确理解了您的问题

我认为问题在于在
c#net
SQL
中定义
NULL
值。编程语言的
NULL
的平均值在SQL中不相同。 在SQL中,空值表示为


只要检查一下如何操作就行了好的,我已经开始工作了,但还没有真正弄明白。我将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);
bulkCopy.DestinationTableName=this.Adapter.TableMappings[0]。DataSetTable;
对于(int i=0;i

我不太清楚为什么其他十几次我没有设置这样的表映射就这样做了,但是出于某种原因,有了这个表,除非我执行上述操作,否则它将无法工作。

InsertTable是吗?这在单行上有效吗?不。它在单行上无效。我怀疑你的插入查询,因为它在这里看起来正常。当我使用常规插入时,它工作正常。使用EntriesV2TableAdapter.Update(InsertTable)也可以正常工作。但是,由于该列中没有一个条目为null,这有关系吗?请阅读错误消息:某个地方有一个
null
DBNull
值。创建行时,
奖金从何而来?你从数据库里读到了吗?有可能是
DBNull
。奖金永远不会为null。唯一会为空的是AutoTime和CustomTime。将这些设置为DBNull对是否引发异常没有影响。数据库中接受这些值的DBNull值。