Сначала я проверяю таблицу, затем обновляю строку. В рамках этого процесса я получаю конфликт. Как у меня есть Windows формы, если я открою 2 windows одно и то же приложение, оба работают в одно и то же время. Я подозреваю, что, если я использую Lock, сможет избежать этого типа конфликта. Веб очень простой, но Windows форм, которые я не знаю. Я использую Oracle.
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)
{
}
}