【发布时间】:2012-12-02 11:10:51
【问题描述】:
我编写了一个程序,它使用单个连接和准备好的语句。到目前为止,这可行,但我正在使用池连接。
我假设准备好的语句与连接池一起使用,但我无法弄清楚它在实践中的使用方式。
我假设我没有存储连接对象,而是为我运行的每个查询创建一个新对象(将被池化)。
在我使用这样的东西之前:
//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),但如果可能的话,欢迎提供通用解决方案。
【问题讨论】:
标签: .net database prepared-statement connection-pooling