1

プリペアドステートメントとの単一の接続を使用するプログラムを作成しました。これまでのところこれは機能しますが、プールされた接続の使用に移行しています。

プリペアドステートメントは接続プールと一緒に使用されると想定していますが、実際にどのように使用されているかを理解することはできません。

接続オブジェクトを保存するのではなく、実行するクエリごとに新しいオブジェクトを作成すると思います(プールされます)。

私がこのようなものを使う前に:

//Single connection at startup
var conn = NpgsqlCommand(...);
...
//Prepare all commands once at start-up
var cmd = new NpgsqlCommand("INSERT...", conn);
cmd.Parameters.Add("id", NpgsqlDbType.Integer);
cmd.Prepare();
...
//Using the command multiple times later on
cmd.Parameters["id"].Value = 4312;
cmd.ExecuteNonQuery();

プールされた接続を使用している場合、これらのコマンドを準備するにはどうすればよいですか?
接続ごとに1つの準備されたコマンドが必要になると思いますが、プールの誰でも接続できる場合は、準備されたコマンドを取得する方法も必要です。

プーリングでも新しい接続を作成できると思いますが、呼び出しごとに、新しいコマンドセットを準備する必要がありますか、それとも新しいNpgsqlCommandを作成して準備し、実行しますか?

いくつかの背景:
私の現在のセットアップは、1人のユーザーを使用したテストであり、数回の呼び出しのみで、すべてが順番に行われます。後で、これは並列実行を伴うマルチユーザー/マルチスレッドサービスになります。

独自の接続プールを作成し、新しいスレッド用のコマンドを準備するための独自のコードを作成する方法はわかりますが、これを作成する必要はないと思いますが、間違っている可能性があります。

私はNpgsql(PostgreSQL)を使用していますが、可能であれば一般的な解決策をいただければ幸いです。

4

1 に答える 1

0

この質問によると、答えは接続プールを使用できないということです。

于 2012-12-05T11:16:16.857 に答える