关于多线程访问ExecuteScalar,ExecuteNonQuery

happyie 2007-07-19 04:41:48
多线程访问ExecuteScalar,ExecuteNonQuery时报:
System.InvalidOperationException: ExecuteScalar 需要打开的并且可用的连接。该连接的当前状态是 Open, Executing。
at System.Data.OleDb.OleDbConnection.SetStateExecuting(OleDbCommand attempt, String method, Boolean flag)
at System.Data.OleDb.OleDbCommand.ValidateConnectionAndTransaction(String method, Int32& localState)
at System.Data.OleDb.OleDbCommand.ExecuteReaderInternal(CommandBehavior behavior, String method)
at System.Data.OleDb.OleDbCommand.ExecuteScalar()

是怎么回事阿 ?
...全文
193 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
amandag 2007-07-19
  • 打赏
  • 举报
回复
ExecuteScalar也是独占连接的,每个访问数据库的对象必须要有自己的连接对象
北京的雾霾天 2007-07-19
  • 打赏
  • 举报
回复
保证每个访问数据库的对象都New一个新的连接。不使用静态的连接对象。
MicroSoftor 2007-07-19
  • 打赏
  • 举报
回复
在使用这个连接的地方价格lock
这样就可以解决了

lock(obj)
{
ExecuteNonQuery(..)
//...
}
honkerhero 2007-07-19
  • 打赏
  • 举报
回复
每个线程各开各的连接
honkerhero 2007-07-19
  • 打赏
  • 举报
回复
System.InvalidOperationException: ExecuteScalar 需要打开的并且可用的连接。该连接的当前状态是 Open, Executing。

该连接的状态是连接状态,执行中

你当然就不能用了,你不会多线程共用一个连接吧???太可怕了

110,538

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧