C#SqlBulkCopy类型不匹配
本文关键字:不匹配 类型 C#SqlBulkCopy | 更新日期: 2023-09-27 18:24:45
我有一个DataTable,它有10列,在其中添加了一些行之后,我想使用SqlBulkCopy
将其添加到数据库中。
我的问题是,在DataTable中,我有字符串,数据库中的一些字段分别是十进制和日期。有没有办法将它们转换为所需的数据类型?
通过编程将列添加到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文件中为字符串。