我有一個DataTable有10列,並添加了一些行後,我想用SqlBulkCopy
將它添加到數據庫。C#SqlBulkCopy類型不匹配
我的問題是,在數據表中我有字符串和數據庫中的一些字段分別是十進制和日期。有沒有辦法將它們轉換爲所需的數據類型?
我有一個DataTable有10列,並添加了一些行後,我想用SqlBulkCopy
將它添加到數據庫。C#SqlBulkCopy類型不匹配
我的問題是,在數據表中我有字符串和數據庫中的一些字段分別是十進制和日期。有沒有辦法將它們轉換爲所需的數據類型?
當編程添加列的數據表,您可以指定類型: -
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;
好的,然後,添加一行,這將如何?我有一個字符串[]需要的所有信息,所以我假設在添加它之前必須先將其轉換。例如:DataRow row = dataTable.NewRow(); row [「Price」] = Convert.ToDecimal(blanketInfo [4]); dataTable.Rows.Add(行);我需要爲所有數據做到這一點,或者有另一種方式嗎? – Rocshy 2012-02-15 12:29:13
取決於blanketInfo [4]是什麼類型。如果該類型不能反映您的目標字段類型,那麼您需要將其轉換。但是,如果它已經是小數,則可以將其分配。 – 2012-02-15 14:06:40
聽起來像你可能會在代碼中創建DataTable中的列(與通過適當設置列數據類型的DataAdapter進行填充相反)。
如果是這種情況,那麼您是否可以不只是使用正確的數據類型來創建DataColumns,而不是使用所有字符串......然後確保何時向它添加行,將數據轉換爲適當的類型?
即達到了你的DataTable正確地具有正確類型和數據的地步,所以SqlBulkCopy可以將數據以正確的形式展現在數據庫中。
有同樣的問題,我在那裏我想從一個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文件中是字符串。
如何將列添加到數據表? – Arion 2012-02-15 12:20:20