我一直停留在這幾天,現在,仍然無法找出原因:甲骨文的ExecuteNonQuery掛在「選擇更新NOWAIT」
我需要在我的Oracle數據庫更新記錄,在執行Update查詢之前,我想用「SELECT x FOR UPDATE NOWAIT」來鎖定數據,但是當調用ExecuteNonQuery時,我的webservice掛起。
直接對數據庫執行sql語句立即工作。 下面是代碼:
OracleTransaction transact = OraDCS.BeginTransaction();
OracleCommand cmd = OraDCS.CreateCommand();
cmd.CommandText = string.Format("UPDATE FLIGHT_MANIFEST_PASSENGER SET ETAT_PASSAGER = '{2}',GATE_BOARDING = {0} WHERE REF_DOSSIER = '{1}'", ConfigurationManager.AppSettings["CodeMoyen"].ToString(), ref_dossier, etatPax);
OracleCommand blq = OraDCS.CreateCommand();
blq.CommandText = string.Format("SELECT * FROM FLIGHT_MANIFEST_PASSENGER WHERE REF_DOSSIER = '{0}' FOR UPDATE NOWAIT", ref_dossier);
bool blqOK = false;
try
{
blq.ExecuteNonQuery();
blqOK = true;
}
catch (Exception ex)
{
LogThreadSafe.Instance.Info("LanceSQL Error : " + blq.CommandText + " " + ex.Message);
}
if (blqOK)
{
try
{
cmd.ExecuteNonQuery();
transact.Commit();
}
catch (Exception ex)
{
transact.Rollback();
LogThreadSafe.Instance.Info("LanceSQL Error : " + blq.CommandText + " " + ex.Message);
}
}
else
transact.Rollback();
該鎖在DATABSE實際執行,但該計劃仍處於該行掛起:
blq.ExecuteNonQuery();
編輯:連交易我仍然連接到命令後體驗凍結。 但是,當我在服務器上部署我的web服務,並且在我的開發機器上測試它「實時」而不是在調試時,它可以工作,有什麼想法?
不回答你的問題,但要注意,你在你的第二個catch塊複製/粘貼錯字 - 你是從* BLQ *命令發出,而不是*在cmd異常消息* 。 –