多线程访问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()是怎么回事阿 ?

解决方案 »

  1.   

    System.InvalidOperationException: ExecuteScalar 需要打开的并且可用的连接。该连接的当前状态是 Open, Executing。该连接的状态是连接状态,执行中你当然就不能用了,你不会多线程共用一个连接吧???太可怕了
      

  2.   

    在使用这个连接的地方价格lock
    这样就可以解决了lock(obj)
    {
     ExecuteNonQuery(..)
    //...
    }
      

  3.   

    保证每个访问数据库的对象都New一个新的连接。不使用静态的连接对象。
      

  4.   

    ExecuteScalar也是独占连接的,每个访问数据库的对象必须要有自己的连接对象