【问题标题】:SQLBulkCopy Throws InvalidOperationException Nullable IntsSQLBulkCopy 引发 InvalidOperationException 可空整数
【发布时间】:2011-02-24 19:28:07
【问题描述】:

我有一个要上传的数据表,但遇到以下异常:
"来自数据源的String类型的给定值不能转换为指定目标列的int类型。"

我认为它可能这样做的唯一原因是 DataTable 中有空单元格被上传到 INT 类型的列。我尝试为 DBNull.Value 切换所有空值,但这似乎不适用于此特定列。上传过程如下:

private void UploadTable(string tableName, DataTable table)
    {
        foreach (DataRow r in table.Rows)
        {
            foreach (DataColumn c in table.Columns)
                if (r[c].ToString().Trim() == "")
                    r[c] = DBNull.Value;
        }

        using (SqlBulkCopy copy = new SqlBulkCopy(sqlCon))
        {

            copy.DestinationTableName = tableName;
            try
            {
                copy.WriteToServer(table);
            }
            catch (Exception ex)
            {
                lblError.Content = ex.ToString();
            }
        }
    }

我上传到的架构是:

[dbo].[table](
[Date] [smalldatetime] NOT NULL,
[Dollar] [varchar](50) NULL,
[CName] [varchar](100) NULL,
[tick] [varchar](10) NULL,
[id1] [varchar](10) NOT NULL,
[Total Quantity] [int] NULL,
[Quantity] [int] NULL
)

关于 SQLBulkCopy 和可为空的 int 库有什么我不知道的特别之处吗?任何意见表示赞赏。

【问题讨论】:

  • 它在哪里抛出错误?在copy.WriteToServer(table); 行?
  • @Abe Miessler - 更有可能 - 是的 - 可能是因为默认类型是字符串,他需要指定 int。
  • 尝试将 r[c] = DBNull.Value 更改为 r[c] = null
  • @paolo - 它抛出同样的错误
  • @paolo - DBNull.Value 是正确的方法。

标签: c# sql nullable sqlbulkcopy invalidoperationexception


【解决方案1】:

向数据表添加数据列时,是否指定列类型为int

【讨论】:

  • 我没有,我会尝试手动执行。但是,我会有另一个问题,因为我现在使用的方法是动态添加列:exceldatareader.codeplex.com,我不确定如何获取该列的数据类型。
  • @SeanVDH - 我从未使用过该库,但必须有一个显示列类型的属性。在excel中,您可以通过右键单击它来获取列的格式..所以必须有某种等价物。无论如何,您的错误是由于该列是一个字符串而不是您想要的数字,即 int。
  • 如果你说的是真的,我不肯定,因为我以前从未遇到过这个错误,而且我有理由确定我已经尝试过这个 - 我认为 DBNull.Value 应该可以工作不管。在任何情况下,您都指出了我的错误——数据文件很糟糕,并且里面有一个小数。我对论坛有点陌生-我仍然将您的答案标记为正确/标记吗?
  • @SeanVDH 我认为您应该自己发布正确答案并将其标记为正确答案(以便您问题的未来读者知道答案是什么)。但是,非常欢迎您投票 JonH 的回答,因为他为您指出了解决方案。只是我的 2 美分
  • @SeanVDH - 对我来说没关系,我是来帮忙的,我并不真正关心我不能用它们交易的点数:0)。我很高兴您解决了您的问题,并且我能指出您一点:o)。
【解决方案2】:

错误的文件输入导致错误 - 包含小数且不应该

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-05-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-13
    • 1970-01-01
    相关资源
    最近更新 更多