C# - Oracle Transaction Exception - 同时有很多用户 - " Execute要求Command对象拥有一个Transaction ..."

时间:2014-11-05 19:31:33

标签: c# oracle transactions

我开发了一个Web应用程序。有些方法使用Transactions。一切正常, 除非有几个用户开始同时使用webapplication 时间。我经常收到以下消息:

  

"当分配给Command的Connection对象处于挂起状态时,Execute要求Command对象具有Transaction对象   本地交易。 Command的Transaction属性没有   已初始化。"

目前情况如此:

1)有一个Web应用程序,可以访问许多不同的方法 一个Oracle数据库。这些方法彼此不相互影响 方法执行自己的任务。

2)有些方法使用事务,有些方法只执行一个SQL 声明,因此不使用交易。

当一个用户使用该应用程序时,一切正常。没有 代码中的错误或无效的事务。

当其他用户有时同时开始使用该应用程序时 之前提到的错误发生了。在这些方法中可能会发生此错误 甚至与使用交易的方法无关。

我们使用Oracle 10g作为数据库。

代码示例:

public String NS_INFO_ESTUDO_TECNICO_MOD(StringDictionary strDict)  {

 OpenConn();

 OracleTransaction oTrans = connection.BeginTransaction(IsolationLevel.ReadCommitted);


 OracleCommand command = connection.CreateCommand();

 command.Transaction = oTrans;

 command.CommandText = "GOMNET_PROJETOS.NS_INFO_ESTUDO_TECNICO_MOD";

 command.CommandType = CommandType.StoredProcedure;

 try
 {
     OracleParameter param30 = new OracleParameter("nCodigoError",OracleType.Number);
     param30.Size = 1000;
     param30.Direction = ParameterDirection.Output;

     command.Parameters.Add(param30);

      command.ExecuteNonQuery();

    if (param30.Value.ToString() != "0")
     {
         oTrans.Rollback();
         return ObtemMensagem(param30.Value.ToString());
     }
     else
     {
         oTrans.Commit();
     }
  return "0"; 
 }
 catch (Exception e)
 {
     throw e;
 }
 finally
 {
     command.Dispose();
 } 

}

此应用程序没有密切连接就有太多的数据库访问权限。在很多方法中使用command.Dispose()。

0 个答案:

没有答案