2012-02-15 153 views
2

我有一个DataTable有10列,并添加了一些行后,我想用SqlBulkCopy将它添加到数据库。C#SqlBulkCopy类型不匹配

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

+0

如何将列添加到数据表? – Arion 2012-02-15 12:20:20

回答

3

当编程添加列的数据表,您可以指定类型: -

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

当您执行批量复制这些将被兑现。

EDIT

响应于用户评论。

当使用信息填充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; 
+0

好的,然后,添加一行,这将如何?我有一个字符串[]需要的所有信息,所以我假设在添加它之前必须先将其转换。例如:DataRow row = dataTable.NewRow(); row [“Price”] = Convert.ToDecimal(blanketInfo [4]); dataTable.Rows.Add(行);我需要为所有数据做到这一点,或者有另一种方式吗? – Rocshy 2012-02-15 12:29:13

+0

取决于blanketInfo [4]是什么类型。如果该类型不能反映您的目标字段类型,那么您需要将其转换。但是,如果它已经是小数,则可以将其分配。 – 2012-02-15 14:06:40

0

听起来像你可能会在代码中创建DataTable中的列(与通过适当设置列数据类型的DataAdapter进行填充相反)。

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

即达到了你的DataTable正确地具有正确类型和数据的地步,所以SqlBulkCopy可以将数据以正确的形式展现在数据库中。

0

有同样的问题,我在那里我想从一个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"]); 

//其中产物(产物温度)是,其数据类型在数据库中的一列是浮动的,在excel文件中是字符串。