我有一些我无法解释的东西,是什么原因引起的?
将数据从C#(dot.net 4.5.1 . )发送到SQL服务器(2008 - 10.0.1600.22 64位Build 6002 Service Pack 2),如下所示:
private int MyBulk(SqlBulkCopy bulkCopy, DataTable dt2save)
{
string tblName = "abc";
/* variable which shows me if save went through or not */
int myErr = 0;
try
{
bulkCopy.DestinationTableName = tblName;
bulkCopy.WriteToServer(dt2save);
}
catch (Exception ex)
{
myErr++;
myLog("a"); /* status check logged in the db */
}
myLog("b - myErr = " + myErr.ToString()); /* log myErr in the db */
return myErr;
}
我知道的:
-
批量插入有效!它保存了数据
-
myErr以值1返回
-
myLog保存"b"值,但不保存"a"值
经过进一步调查后,看起来异常变量中的错误消息告诉我在数据库BUT中有一个非空的列使事情变得更奇怪,我保存的数据表确实有一个真正的非空INT值柱 .
我宁愿不更改数据表以使列可以为空,我应该更改什么?是否有可能这是一个小问题,也许我不是导致这个问题的人?
UPDATE
-
如果SQL Server抱怨您尝试在不允许NULL的列中存储NULL值,那么毫无疑问,这正是发生的事情 - 插入经过,该列是ID列,而不是它不是null,它有548(int) . 对于log4net,NLog - 使(某些)有意义,但其中一个日志经历了所以不确定为什么它不会像这样
-
表格相同,bulkinsert经历了
-
不,我不是多次调用该方法
-
我在数据表中使用 one row 进行测试