我有一些我无法解释的东西,是什么原因引起的?

将数据从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 进行测试