我编写了一个程序,它使用一个带有准备好的语句的连接。到目前为止,这可行,但我正在使用池连接。
我假设准备好的语句与连接池一起使用,但我无法了解它在实践中的使用方式。
我假设不是存储连接对象,而是为我运行的每个查询创建一个新的对象(它将被池化)。
在我使用这样的东西之前:
//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) 但如果可能的话,一个通用的解决方案表示赞赏。