//OracleCommand最近出現資料修改不成功,之前我懷疑是沒有呼叫手動提交事務;
//之后改成手動提交事務,SQL和引數都沒有改,試用兩天發現都能正常修改資料,但是兩天之后又再次出現資料修改不成功;
//我在網上看到有博主也反映了這個修改資料問題,說是添加引數的順序問題,是沒有順序排列導致,但是在此之前這段代碼都能正常運行;
//這段代碼之前一點問題都沒有,就是這兩天就不能修改資料了,但是插入資料是可以的
public static int QueryCarton(string TXTBarcode, string g_sLoginUserID, string mesdb, string fac, string location = "")
{
string sql;
var para = new List<OracleParameter>();
if (string.IsNullOrWhiteSpace(location))
{
sql = @"UPDATE WMSUSER.INVENTORY_COMPARE AA
SET COMPARE_STATUS = 'Y',
AA.OPERATOR_ID = :g_sLoginUserID,
AA.OPERATE_TIME = SYSDATE,
AA.REASON = ''
WHERE AA.CARTON_NO = :TXTBarcode
AND AA.MESDB = :MESDB
AND AA.FAC = :FAC";
}
else
{
sql = @"UPDATE WMSUSER.INVENTORY_COMPARE AA
SET COMPARE_STATUS = 'Y',
AA.OPERATOR_ID = :g_sLoginUserID,
AA.OPERATE_TIME = SYSDATE,
AA.REASON = '',
AA.LOCATION_ID = :LOCATION_ID
WHERE AA.CARTON_NO = :TXTBarcode
AND AA.MESDB = :MESDB
AND AA.FAC = :FAC ";
para.Add(new OracleParameter(":LOCATION_ID", location));
}
para.Add(new OracleParameter(":TXTBarcode", TXTBarcode));
para.Add(new OracleParameter(":g_sLoginUserID", g_sLoginUserID));
para.Add(new OracleParameter(":MESDB", mesdb));
para.Add(new OracleParameter(":FAC", fac));
return ExecuteNonQueryForTransaction(PWSDB, sql, para.ToArray());
}
private static ExecuteResult ExecuteNonQueryForTransaction(string sql, List<OracleParameter> para)
{
var exeRes = new ExecuteResult();
if (string.IsNullOrWhiteSpace(sql)) { return exeRes; }
try
{
exeRes = oracleHelper.BeginTransaction();
if (!exeRes.Status) { return exeRes; }
exeRes = oracleHelper.ExecuteNonQueryForTransaction(sql, para);
if (exeRes.Status) { oracleHelper.Commit(); }
else { oracleHelper.Rollback(); }
}
catch (Exception ex)
{
oracleHelper.Rollback();
exeRes.Status = false;
exeRes.Message = ex.Message;
}
finally
{
oracleHelper.EndTransaction();
}
return exeRes;
}
public ExecuteResult ExecuteNonQueryForTransaction(string sql, params OracleParameter[] paras)
{
ExecuteResult execRes = new ExecuteResult();
try
{
sql = ProcessSqlCommandText(sql);
int result = 0;
using (var cmd = oracleConnection.CreateCommand())
{
cmd.BindByName = true;
cmd.CommandText = sql;
cmd.CommandType = CommandType.Text;
cmd.Parameters.AddRange(paras);
cmd.Transaction = oracleTransaction;
result = cmd.ExecuteNonQuery();
}
execRes.Status = result > 0;
execRes.Anything = result;
}
catch (Exception ex)
{
execRes.Status = false;
execRes.Message = ex.Message;
}
return execRes;
}
uj5u.com熱心網友回復:
修改時進行調式跟蹤,逐行看執行結果。這樣才能更準確的定位錯誤。uj5u.com熱心網友回復:
這段代碼有時候今天試了又可以正常修改資料,所以我很納悶,有時可以正常修改,有時又有2-3W條資料沒有修改成功;修改之后有添加日志記錄,回傳狀態為true,插入Y,false則為N,前兩天查詢日志資料都是Y,但是資料沒有修改成功;
這段代碼每天下午要修改10-20W條資料,這個表我沒有加索引,是不是沒有添加索引,修改資料時,鎖定的是全表?加了索引時,鎖定的是單行?
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/39854.html
標籤:C#
