1

データベース接続とwinappについてサポートが必要です。

ログインした後、5〜10秒ごとにOracleデータベースで5つまたは6つの異なるクエリの実行を開始するWindowsアプリ(C#)があります。アプリケーションは24時間年中無休です。

これを行うための適切な方法は何ですか?ログイン中に接続を開き、アプリを閉じるまで接続を閉じないようにする必要がありますか、それともクエリを実行するたびに接続を開いて閉じる必要がありますか?例えば:

//first query
conn.Open();
DataSet ds1 = new DataSet();

string sql = "SELECT * FROM table1";

OracleCommand cmd = new OracleCommand(sql, conn);
cmd.CommandType = CommandType.Text;
OracleDataAdapter da = new OracleDataAdapter(cmd);
da.Fill(ds1, "Result1");
conn.Dispose();

return ds1;

//second query    
conn.Open();
DataSet ds2 = new DataSet();

string sql = "SELECT * FROM table2";

OracleCommand cmd = new OracleCommand(sql, conn);
cmd.CommandType = CommandType.Text;
OracleDataAdapter da = new OracleDataAdapter(cmd);
da.Fill(ds2, "Result2");
conn.Dispose();

return ds2;

これを行うための最良の方法は何ですか?

4

3 に答える 3

3

アプリケーションで使用するOracleOleDBプロバイダーは、プーリングを実装します。したがって、接続を作成してクローリングするときは、「実際の接続」のプールから接続を取得/解放するだけです。

これにより、Connectionオブジェクトの作成と破棄が非常に安価な操作になります。私があなたなら、接続を開き、クエリのバッチを実行し、完了してスリープ状態になるとすぐに(数秒間でも)その接続を閉じて破棄します。

于 2012-09-27T12:42:38.280 に答える
2

もちろん、別のオプションは、クエリの「バッチ」ごとに1つの接続を確立することです。

ただし、データベースに頻繁にアクセスしている場合は、アプリケーションの実行中は永続的な接続が必要であるように思われます。

もちろん、あなたのサンプルは単なる例であり、生のSQLでデータベースに実際にアクセスしているわけではないと思います。

于 2012-09-27T12:41:44.957 に答える
1

using私はあなたがあなたのためにブロックを使用することをお勧めしcleanますnon managed object

using(var connection = new OracleConnection("..."))
{
 .....

}

注:処理の最後にオブジェクトに対してexecutedisposeを使用する

リンク: http: //msdn.microsoft.com/fr-fr/library/yh598w02 (v = vs.80).aspx

于 2012-09-27T12:45:55.397 に答える