首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

关于多线程访问ExecuteScalar,ExecuteNonQuery解决思路

2012-01-18 
关于多线程访问ExecuteScalar,ExecuteNonQuery多线程访问ExecuteScalar,ExecuteNonQuery时报:System.Inval

关于多线程访问ExecuteScalar,ExecuteNonQuery
多线程访问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()

是怎么回事阿   ?

[解决办法]
System.InvalidOperationException: ExecuteScalar 需要打开的并且可用的连接。该连接的当前状态是 Open, Executing。

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

你当然就不能用了,你不会多线程共用一个连接吧???太可怕了
[解决办法]
在使用这个连接的地方价格lock
这样就可以解决了

lock(obj)
{
ExecuteNonQuery(..)
//...
}
[解决办法]
保证每个访问数据库的对象都New一个新的连接。不使用静态的连接对象。
[解决办法]
ExecuteScalar也是独占连接的,每个访问数据库的对象必须要有自己的连接对象

热点排行