【发布时间】:2019-07-02 09:25:39
【问题描述】:
如何更正代码,使异常不再出现?
SqlConnection
sqlCnn = new SqlConnection("Connection String");
SqlCommand
sqlCmdSelect = new SqlCommand("SQL SELECT statement;", sqlCnn),
sqlCmdUpdate = new SqlCommand("SQL UPDATE statement;", sqlCnn);
Thread
t1 = new Thread(()=>{
SqlDataReader sdr;
while(true)
{
sdr = sqlCmdSelect.ExecuteReader();
// Do some works
sdr.Close();
}
}),
t2 = new Thread(()=>{
SqlDataAdapter sda;
while(true)
{
using(sda = new SqlDataAdapter())
{
// Do some works
sda.UpdateCommand = sqlCmdUpdate;
if(!sdr.IsClosed) sdr.Close();
sda.UpdateCommand.ExecuteNonQuery();
}
}
});
t1.Start();
t2.Start();
System.InvalidOperationException:“已经有一个打开的 DataReader 与此命令关联,必须先关闭。”
【问题讨论】:
-
你为什么要首先这样做?它不会让您的代码运行得更快,它可能会导致阻塞或死锁。简单地使用
SqlDataAdapter进行更新会显着降低性能。无论您想做什么,使用 SQL 或使用适当的技术(如批量插入或批量更新)可能更容易完成 -
您首先要做什么,为什么要同时阅读和更新?也许您只需要一个
UPDATE FROM .... WHERE...。
标签: c# sql-server multithreading