我编写了一个程序,它使用单个连接和预准备语句。到目前为止,这有效,但我正在使用池化连接。
我假设准备好的语句与连接池一起使用,但我无法理解它在实践中如何使用。
我假设不是存储连接对象,而是为我运行的每个查询创建一个新的(将被合并)。
在我使用这样的东西之前:
//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();
现在使用池化连接,我该如何准备这些命令? 我想我需要为每个连接准备一个命令,但我还需要一些方法来获得准备好的命令给定一个连接,可以是池中的任何人。
我认为池也可以创建新连接,然后我需要准备一组新命令,或者我是否需要为每次调用创建一个新的NpgsqlCommand,准备并执行它?
一些背景:
我目前的设置是对单个用户的测试,其中只有几个呼叫,所有这些呼叫都是按顺序进行的。稍后,这将是一个并行执行的多用户/多线程服务。
我可以看到如何创建自己的连接池并编写自己的代码来为新线程准备命令,但我假设我不必写这个,但我可能错了。
我正在使用Npgsql(PostgreSQL)但是如果可能的话,我们会感谢一般的解决方案。