2017-01-25 38 views
0

我無法理解如何使用OracleConnection對象如何使用不同的查詢使用OracleConnection C#

將它用於所有查詢?或一個查詢的連接?

我的程序做:

1)收到的數據從Oracle DB(光標)(〜100.000 - 1.000.000記錄)

2)對於每個選擇的記錄(ID)更新值在另一個表

什麼是正確的:

1)對於每個查詢

using(OracleConnection connection = new OracleConnection(connectionString)) 
{ 
    using(OracleCommand command = new OracleCommand(recieveSql, connection)) 
    { 
     connection.Open(); 
     ... 
     command.ExecuteNonQuery(); 
     ... 
     using(OracleDataReader reader = command.ExecuteReader()) 
     { 
      while(reader.Read()) 
      { 
       int id = reader.GetInt32(0); 
       string value = reader.GetInt32(1); 
       UpdateRecord(id, value); 
      } 
     } 
    } 
} 


private void UpdateRecord(int id, string value) 
{ 
    using(OracleConnection connection = new OracleConnection(connectionString)) 
    { 
     using(OracleCommand command = new OracleCommand(updateSql, connection)) 
     { 
      connection.Open(); 
      ... 
      command.Parameters.AddWithValue("@id", id); 
      command.Parameters.AddWithValue("@value", value); 
      command.ExecuteNonQuery(); 
      ... 
     } 
    } 
} 
創建的OracleConnection

2)使用1周的OracleConnection所有查詢

using(OracleConnection connection = new OracleConnection(connectionString)) 
{ 
    using(OracleCommand command = new OracleCommand(recieveSql, connection)) 
    { 
     connection.Open(); 
     ... 
     command.ExecuteNonQuery(); 
     ... 
     using(OracleDataReader reader = command.ExecuteReader()) 
     { 
      while(reader.Read()) 
      { 
       int id = reader.GetInt32(0); 
       string value = reader.GetInt32(1); 
       UpdateRecord(connection, id, value); 
      } 
     } 
    } 
} 


private void UpdateRecord(OracleConnection connection, int id, string value) 
{ 
    using(OracleCommand command = new OracleCommand(updateSql, connection)) 
    { 
     ... 
     command.Parameters.AddWithValue("@id", id); 
     command.Parameters.AddWithValue("@value", value); 
     command.ExecuteNonQuery(); 
     ... 
    } 
} 
+1

我會說有一個明顯的開銷打開100.000+連接所有這些更新。但是如果你爲了這個問題而沒有簡化你的任務/代碼,我會爭論爲什麼編寫任何C#代碼?從一個DB到另一個DB的簡單更新可以直接在SQL中完成。 – Filburt

+0

因爲我想有一個機會來改變價值或從程序中做點什麼,然後保存到DB 大多數情況下,我只是想學習C# - Oracle通信和我的程序不做有用的事情... –

回答

0

在你的情況,我寧願:第二個,只有1個數據庫連接。

請記住,在客戶端和數據服務器端都需要打開OracleConnection

通常,指南是1線程=> 1 OracleConnection

如果您有多個線程或者您仍然想要使用多個OracleConnection,您可以定義一個OracleConnection池,只需在連接字符串中設置一些參數即可。