C#

2017-01-25 1 views
0

異なるクエリでのOracleConnectionを使用するには、どのように私はすべてのクエリのためにそれを使用するOracleConnectionオブジェクトでC#

を動作させる方法を理解できないのですか?または1つのクエリの1つの接続?

私のプログラムが実行します。

1)レシーブデータをOracleのDB(カーソル)(から〜100.000 - 別のテーブル

で選択した各レコード(ID)更新値の場合1.000.000記録)

2)正しいかどう

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#コードを書くのかと主張したいと思います。 1つのDBから別のDBへの単純なUPDATEをSQLで直接行うことができます。 – Filburt

+0

DBに保存する前に値を変更したり、プログラムから何かをしたいのですが 大抵私はC#を学びたいと思っています - オラクルのコミュニケーションと私のプログラムは役に立たないと思います... –

答えて

0

を照会し、私は、1つだけのデータベース接続を第二1を好むだろう。

OracleConnectionを開くことは、クライアント側とdataserver側の両方で高価です。

多くの場合、ガイドラインは1スレッド=> 1 OracleConnectionです。

複数のスレッドがある場合、または複数のOracleConnectionを使用する場合は、接続文字列にパラメータを設定するだけでOracleConnectionプールを定義できます。