我是新手C#dev,我正在编写一个数据库应用程序,它在两个不同的表上执行更新,并在另外两个表上插入,每个进程都在它自己的独立线程上运行。所以我有两个线程处理两个不同表上的插入,两个线程处理两个不同表上的更新。每个进程每秒更新和插入大约4或5次,因此在完成会话结束之前我不会关闭连接然后关闭整个应用程序。我想知道我是否应该在每次插入和更新后关闭连接,即使我经常执行这些操作。 2,我应该让每个线程都运行在它自己的连接和命令对象上。
顺便说一下,我在C#中编写应用程序,数据库是MySQL。此外,截至目前,我正在为所有四个线程使用一个连接和命令对象。我一直收到一条错误消息,说“已经有一个与此连接关联的开放DataReader必须先关闭”,这就是为什么我要问我是否应该使用多个连接和命令对象。
由于
-Donld
答案 0 :(得分:2)
如果启用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();
}
}
当然,这是一个人为的,简单化的例子,但它的要点就是。
答案 1 :(得分:0)
您要么为每个线程创建一个新连接,要么(这是一个想法)创建一个同步的命令队列。然后在一个工作线程中处理队列。
您也可以看一下.Net framework 4的Task类