如何在c#中为数据表的数字字段插入空值?

c# insert null numeric sqlbulkcopy

考虑我的动态生成的数据表包含以下文件Id,Name,Mob1,Mob2

如果我的数据表有这个,它会成功插入,

Id Name Mob1        Mob2
1  acp  9994564564  9568848526

但是当它像这样失败时说,

Id Name Mob1        Mob2
1  acp  9994564564  

The given value of type String from the data source cannot be converted to type decimal of the specified target column.

我通过读取一个csv文件生成我的数据表,

    CSVReader reader = new CSVReader(CSVFile.PostedFile.InputStream);
    string[] headers = reader.GetCSVLine();
    DataTable dt = new DataTable();
    foreach (string strHeader in headers)
    {
        dt.Columns.Add(strHeader);
    }
    string[] data;
    while ((data = reader.GetCSVLine()) != null)
    {
        dt.Rows.Add(data);
    }

任何建议如何在c#中的BulkCopy期间为数字字段插入空值...

编辑:

我试过这个dt.Columns["Mob2"].AllowDBNull = true;但它似乎不起作用......

一般承认的答案

我通过为它分配一个空值来实现它....

if(dr["Mob2"] == "")
  dr["Mob2"] =null;

热门答案

您确定应用程序中的其他位置不会发生错误吗?如果您的DataColumn甚至知道它包含十进制值而不是字符串,您没有定义其DataType。

无论如何错误说问题是一个字符串 - 十进制转换(不是一个空的问题),所以我认为你读取第二行时收到一个emty字符串“”而不是null。如果在调用Rows.Add之前它们包含空字符串,请尝试将数据数组的字段设置为null




许可下: CC-BY-SA with attribution
不隶属于 Stack Overflow
这个KB合法吗? 是的,了解原因
许可下: CC-BY-SA with attribution
不隶属于 Stack Overflow
这个KB合法吗? 是的,了解原因