C# 如何在C中使用select语句锁定Oracle表?我尝试使用NOLOCK,但仍然无法锁定。我在使用任务时遇到冲突
首先,我检查表,然后更新行。在这个过程中,我遇到了冲突。就像我有Windows窗体一样,如果我打开两个窗口,同一个应用程序将同时运行。我怀疑如果我使用Lock可以避免这种类型的冲突。Web非常简单,但Windows窗体我不知道。我正在使用OracleC# 如何在C中使用select语句锁定Oracle表?我尝试使用NOLOCK,但仍然无法锁定。我在使用任务时遇到冲突,c#,oracle,winforms,C#,Oracle,Winforms,首先,我检查表,然后更新行。在这个过程中,我遇到了冲突。就像我有Windows窗体一样,如果我打开两个窗口,同一个应用程序将同时运行。我怀疑如果我使用Lock可以避免这种类型的冲突。Web非常简单,但Windows窗体我不知道。我正在使用Oracle public Tasks GetTaskDetails() { Tasks tasks = new Tasks(); DataLayer datalayer = new DataLayer(_strConn);
public Tasks GetTaskDetails()
{
Tasks tasks = new Tasks();
DataLayer datalayer = new DataLayer(_strConn);
OracleCommand ocdSelect = new OracleCommand();
Sqlquery = "SELECT * FROM basictasks NOLOCK WHERE STATUS = 1 and rownum = 1 order by TASKID";
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;
UpdateTaskDetails(tasks);
return tasks;
}
return null;
}
public void UpdateTaskDetails(Tasks task)
{
DataLayer datalayer = new DataLayer(_strConn);
OracleCommand cmd = new OracleCommand();
try
{
Sqlquery = "BEGIN ";
if (task.FinishJob)
Sqlquery += string.Format("UPDATE basictasks SET STATUS = " + task.Status + ", ENDTIME = SYSDATE,REMARK = '" + task.Remarks + "' WHERE TASKID = " + task.TaskID + " ;");
else
Sqlquery += string.Format("UPDATE basictasks SET STATUS = " + task.Status + ", STARTTIME = SYSDATE WHERE TASKID = " + task.TaskID + " ;");
Sqlquery += " END;";
datalayer.TableOperation_BySQL(Sqlquery, true);
if (datalayer != null)
datalayer.CheckTransaction(true);
}
catch(Exception ex)
{
}
}
选择从…起是否要更新nowait?@DmitryBychenko是的,它似乎在工作。可以锁定,但如何提交。意思是更新后我需要提交。现在无法更新,因为表是锁。1。启动事务OracleTransaction 2。执行选择。。。从…起对于此事务中的update nowait,表现在已锁定3。在事务4中执行更新。提交事务并更新committed和lockreleased@DmitryBychenko好的,我现在就试试。@DmitryBychenko它正在工作,谢谢。无论如何,我得到了一个异常ORA-00054:资源繁忙,并在指定NOWAIT或超时的情况下获取。但我可以忽略它。谢谢