C#SqlBulkCopy类型不匹配

时间:2012-02-15 12:13:55

标签: c# sqlbulkcopy

我有一个包含10列的DataTable,在我添加了一些行后,我想使用SqlBulkCopy将它添加到数据库中。

我的问题是在DataTable中我有字符串,数据库中的一些字段分别是十进制和日期。有没有办法将它们转换为所需的数据类型?

3 个答案:

答案 0 :(得分:4)

以编程方式向DataTable添加列时,您可以指定类型: -

DataTable dt = new DataTable();
dt.Columns.Add("FieldName", typeof(System.Decimal));

执行批量复制时,这些将被尊重。

修改

回应用户评论。

在使用信息填充DataRow时,如果源数据与目标字段不匹配,则显式转换仅

如果类型相同,您只需指定它即可。

e.g。

// With a decimal field, decimal target
Decimal myNum = 123;
// Works fine - assuming the Price datacolumn has been set up as a System.Decimal
row["Price"] = myNum;

答案 1 :(得分:0)

听起来您可能正在代码中创建DataTable中的列(而不是通过DataAdapter填充,这将适当地设置列数据类型)。

如果是这种情况,那么你是否可以不只是创建具有正确数据类型的DataColumns而不是所有字符串...然后确保在向其添加行时,将数据转换为适当的类型?

即。到达你的DataTable正确的类型和数据正确的位置,这样SqlBulkCopy就可以将数据爆发到DB中,数据已经是正确的格式。

答案 2 :(得分:0)

遇到了同样的问题,我认为从具有字符串的excel文件中复制数据,我希望它们以double的形式存储在数据库中。我已粘贴与以下问题相关的代码: -

DataTable dt = new DataTable();

//从第一张纸上读取数据

    connExcel.Open();
    cmdExcel.CommandText = "SELECT * From [" + SheetName + "] ";
        oda.SelectCommand = cmdExcel;
        oda.Fill(dt);
        connExcel.Close();


        Convert.ToDouble(dt.Columns["Product"]);

//其中product(产品温度)是数据库中的数据类型为float且excel文件为string的列。