2013-06-18 51 views
-1

我想從我的數據表插入到oracle表中的所有記錄。我已經想出瞭如何插入單個記錄,但是我怎麼去插入多個記錄。這裏最大的問題是數據集中列的順序與oracle表中列的順序不匹配。插入數據集到Oracle表

這裏是代碼我使用插入一條記錄:

OdbcCommand cmd = new OdbcCommand(); 
    try 
    { 
     cmd.Connection = getDBConnection(); //This calls another method that just gets the connection to database 
     cmd.CommandType = CommandType.Text; 
     cmd.CommandText = "INSERT INTO MY_INSERT_TEST(NAME) VALUES(\'Test 1\')"; 
     cmd.ExecuteNonQuery(); 
     cmd.Connection.Close(); 
     cmd.Dispose(); 
    } 
    catch 
    { 
     cmd.Connection.Close(); 
     cmd.Dispose(); 
    } 

讓我怎麼修改這些從數據集中添加的所有記錄?

+0

爲什麼使用OdbcConnection而不是OracleConnection(Microsoft或Oracle提供程序)? – Steve

+0

這爲什麼重要? – Bojan

+0

如果您在INSERT中命名它們,則列的順序無關緊要:INSERT INTO myTable(Col3,Col1,Col2)VALUES('Col3的值','Col1的值','Col2的值' )' –

回答

2

假設你想要遍歷行集合,並且想要插入所有這些行,那麼我會嘗試使用這樣的僞代碼。

string cmdText = "INSERT INTO MY_INSERT_TEST(Col1, Col2, Col3) VALUES(?, ?, ?)"; 
using(OdbcConnection cn = getDBConnection()) 
using(OdbcCommand cmd = new OdbcCommand(cmdText, cn)) 
{ 
    cn.Open(); 
    cmd.Parameters.AddWithValue("@p1", ""); 
    cmd.Parameters.AddWithValue("@p2", ""); 
    cmd.Parameters.AddWithValue("@p3", ""); 
    foreach(DataRow r in dt.Rows) 
    { 
     cmd.Parameters["@p1"].Value = r["Column3"].ToString()); 
     cmd.Parameters["@p2"].Value = r["Column1"].ToString()); 
     cmd.Parameters["@p3"].Value = r["Column2"].ToString()); 
     cmd.ExecuteNonQuery(); 
    } 
} 

建立參數化的查詢,定義參數(這裏是字符串類型的所有參數,需要進行檢查),然後遍歷所有的數據表中的分配從對應的列中的參數值的行。請注意,在命令文本中,您不會直接寫入值,而是爲將在循環內提​​供的實際值放置一個佔位符。

+0

謝謝,我想這就是我一直在尋找的東西。 – Bojan

+0

您需要測試此代碼,我沒有Oracle數據庫,因爲我曾經說過這是一個僞代碼,只是顯示可能的解決方案 – Steve