2012-02-15 59 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文件中是字符串。