我有一个包含10列的DataTable,在我添加了一些行后,我想使用SqlBulkCopy
将它添加到数据库中。
我的问题是在DataTable中我有字符串,数据库中的一些字段分别是十进制和日期。有没有办法将它们转换为所需的数据类型?
答案 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的列。