C#SqlBulkCopy类型不匹配

本文关键字:不匹配 类型 C#SqlBulkCopy | 更新日期: 2023-09-27 18:24:45

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

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

C#SqlBulkCopy类型不匹配

通过编程将列添加到DataTable时,可以指定类型:-

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

当您执行大容量复制时,将遵守这些规定。

编辑

响应用户评论。

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

如果类型相同,您可以直接分配。

例如

// 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;

听起来像是在代码中创建DataTable中的列(而不是通过DataAdapter填充,后者会适当地设置列数据类型)。

如果是这样的话,那么你能不能不只是用正确的数据类型来创建DataColumns,而不是所有的字符串。。。然后确保在向其中添加行时,将数据转换为适当的类型?

即,达到DataTable具有正确类型和数据的程度,这样SqlBulkCopy就可以将其以正确形式的数据爆破到DB中。

遇到了同样的问题,在中,我假设从一个包含字符串的excel文件中复制数据,并希望它们以双精度存储在数据库中。我已经粘贴了与以下问题相关的代码:-

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(product-temperature)是一列,其数据类型在数据库中为float,在excel文件中为字符串。