C# ORA-00054:资源正忙,并在指定NOWAIT或超时过期连接的情况下获取。即使在提交之后也会遇到相同的问题

C# ORA-00054:资源正忙,并在指定NOWAIT或超时过期连接的情况下获取。即使在提交之后也会遇到相同的问题,c#,.net,oracle,C#,.net,Oracle,一旦关闭连接并重新打开连接,即可开始工作。但我不希望它每次都打开和关闭连接。我想使用一个连接。为什么要使用更新子句?您是否正在更新此select语句返回的任何内容?如果没有,请删除该子句,您就可以了。@Littlefoot是的,我正在通过select结果更新return。taskid是表中的PK吗?@gsalem是主键。您的代码中是否存在任何类型的多线程处理?我这样问是因为单个会话不应该出现这种错误。我对c#一点经验都没有,所以说不上来。 Query : "SELECT * FROM basic

一旦关闭连接并重新打开连接,即可开始工作。但我不希望它每次都打开和关闭连接。我想使用一个连接。

为什么要使用
更新
子句?您是否正在更新此
select
语句返回的任何内容?如果没有,请删除该子句,您就可以了。@Littlefoot是的,我正在通过select结果更新return。taskid是表中的PK吗?@gsalem是主键。您的代码中是否存在任何类型的多线程处理?我这样问是因为单个会话不应该出现这种错误。我对c#一点经验都没有,所以说不上来。
Query : "SELECT * FROM basictasks WHERE STATUS = 1 and rownum = 1 order by TASKID for update nowait" 

octTransaction.Commit();
octTransaction.Dispose();
 Tasks tasks = new Tasks();
               DataLayer datalayer = new DataLayer();
               datalayer = Login.objDataLayer;
               OracleCommand ocdSelect = new OracleCommand();
               datalayer.BeginTransaction();
               Sqlquery = "SELECT * FROM basictasks WHERE STATUS = 1 and rownum = 1 order by TASKID for update nowait ";
               ocdSelect.CommandText = Sqlquery;

               DataTable dt = datalayer.GetResultDT(ocdSelect, false);
               if (dt.Rows.Count > 0)
               {
                   tasks.TaskID = Convert.ToInt32(dt.Rows[0]["TASKID"]);
                   tasks.MechineName = dt.Rows[0]["MACHINENAME"].ToString();
                   tasks.Parameters = dt.Rows[0]["PARAMETERS"].ToString();
                   tasks.TaskName = dt.Rows[0]["TASKNAME"].ToString();
                   tasks.Description = dt.Rows[0]["DESCRIPTION"].ToString();
                   tasks.Status = 2;
                   tasks.StartTime = DateTime.Now.ToString("MM/dd/yyyy hh:mm:ss tt");
                   tasks.FinishJob = false;
                   Sqlquery = "UPDATE basictasks SET STATUS = " + tasks.Status + ", STARTTIME = SYSDATE,MACHINENAME = '" + Common.MechineName + "',REMARK = ' ',ENDTIME = null WHERE TASKID = " + tasks.TaskID + "";
                   datalayer.TableOperation_BySQL(Sqlquery, true);
                   if (datalayer != null)
                       datalayer.CheckTransaction(true);
                   return tasks;
               }

               else
               {
                   if (datalayer != null)
                       datalayer.CheckTransaction(true);
               }
           }