我是 C# 开发新手,我正在编写一个数据库应用程序,它在两个不同的表上执行更新并在另外两个表上插入,每个进程都在它自己的单独线程上运行。所以我有两个线程处理两个不同表上的插入,两个线程处理两个不同表上的更新。每个进程每秒更新和插入大约 4 或 5 次,因此在整个 session 结束之前我不会关闭连接,然后关闭整个应用程序。我想知道是否应该在每次插入和更新后关闭连接,即使我如此频繁地执行这些操作。第二,我是否应该让每个线程在它自己的连接和命令对象上运行。
顺便说一句,我正在用 C# 编写应用程序,数据库是 MySQL。此外,到目前为止,我正在为所有四个线程使用一个连接和命令对象。我不断收到一条错误消息,指出“已经有一个与此连接关联的打开的 DataReader 必须先关闭”,这就是为什么我问我是否应该使用多个连接和命令对象。
谢谢
-唐尔德
最佳答案
如果启用 connection pooling ,它应该能够为您的场景优化使用 MySql 连接。无论哪种方式,通常要遵循的最佳模式是:
- 获取并打开连接
- 做作业
- 关闭/释放连接
类似于(我对 MySql 连接器的类名有点生疏,所以这可能不是完全正确的,但您应该了解总体思路!):
private void DoMyPieceOfWork(int value1, int value2)
{
using(MySqlConnection connection = new MySqlConnection(
CONNECTION_STRING_GOES_HERE))
{
connection.Open();
using(MySqlCommand command = new MySqlCommand(
"INSERT INTO TABLE `blah` (Column1, Column2) VALUES @column1, @column2"))
{
command.Parameters.Add("@column1", MySqlType.Int).Value = value1;
command.Parameters.Add("@column2", MySqlType.Int).Value = value2;
command.ExecuteNonQuery();
}
connection.Close();
}
}
当然,这是一个人为的、简单化的示例,但它的要点是正确的。
关于c# - 如何使用多线程管理连接和命令对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4931291/