c# - 如何使用多线程管理连接和命令对象

标签 c# mysql

我是 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/

相关文章:

c# - Regex.Replace 在 html 字符串中查找可变宽度和高度并替换为设置值

c# - 如何在 C# 正则表达式中将名称与斜线匹配?

c# - 如何消除对命名空间前缀的需要?

mysql - 如何加密 MySQL 中的值?

mysql innodb 更改两个具有外键的表

sql - MySQL 查找相关文章

c# - 代码首先,EF 4.1 : What is the best way to map the following classes with a database. ..?

C#:关于打开和保存文件我需要知道哪些事情(例如验证)

mysql - phpMyAdmin Magento 价格更新

java - Informix、MySQL 和 Oracle blob 包含