2014-03-31 58 views
1

我試圖從一個Oracle數據庫中獲取多個表中的數據並將其插入到一個sql數據庫中。我遇到的問題是我正在讀取幾乎50列所有不同數據類型的數據。然後我繼續將這些單獨的列值插入到SQL語句中,然後將數據插入到sql數據庫中。所以算法中看起來是這樣的:自動檢測Oracle數據類型

Fetch row data{ 
create a variable for each individual column value (int value = reader.getInt32(0);) 
add a sqlparameter for it (command.Parameters.Add(new SqlParameter("value", value));) 
once all the 50 or so variables have been created make a sql statement 
Insert into asdf values (value,........) 
} 

這樣做是爲了與< 10列的表這種方式看起來不錯,但是當它超過了長度這個過程似乎有些單調乏味和無關。我想知道是否有像獲取行數據一樣的簡單方法,並自動確定列數據類型並自動創建varialbe並自動插入到sql語句中。如果有人能指導我以正確的方式做到這一點,我將不勝感激。

回答

0

數據讀取器具有中性GetValue方法返回一個objectSqlCommand具有AddWithValue方法不需要指定參數類型。

for (int i = 0; i < reader.VisibleFieldCount; i++) { 
    object value = reader.GetValue(i); 
    command.Parameters.AddWithValue("@" + i, value); 
} 

您還可以創建自動的SQL命令

var columns = new StringBuilder(); 
var values = new StringBuilder(); 
for (int i = 0; i < reader.VisibleFieldCount; i++) { 
    values.Append("@").Append(i).Append(", "); 
    columns.Append("[").Append(reader.GetName(i)).Append("], "); 
} 
values.Length -= 2; // Remove last ", " 
columns.Length -= 2; 
string insert = String.Format("INSERT INTO myTable ({0}) VALUES ({1})", 
           columns.ToString(), values.ToString());