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);
}
}