我正在對傳統應用程序進行一些維護,使用OracleConnection和OracleCommand來管理我們的數據。我遇到了一個問題,即當我使用參數時特定的更新不起作用,但如果我將相同的語句轉換爲插入的字符串,則工作正常。我沒有收到任何異常,更新不會發生,並且爲更新的行返回0。我正在用參數進行其他更新,所以我很好奇,如果有人看到我可能錯過的任何內容。我嘗試了/不使用事務,也沒有明確地創建OracleParameter對象。OracleCommand更新適用於插值SQL,但不適用於參數化
該方法如下。我已將參數化版本和參數設置註釋掉以供參考。
public int UpdateBusinessEntitlement(int appId, int businessId, int entitlementTypeId, string sso)
{
// Non-Working Parameterized Version
//var sql = "UPDATE APD.APD_BUS_TO_APP_MAP " +
// "SET ENTITLEMENT_TYPE_SEQ_ID = :entitlementTypeId, " +
// "LAST_UPDATE_DATE = SYSDATE, " +
// "LAST_UPDATED_BY = :lastUpdatedBy " +
// "WHERE APP_SEQ_ID = :appId AND BUSINESS_SEQ_ID = :businessId";
var sql = "UPDATE APD.APD_BUS_TO_APP_MAP " +
$"SET ENTITLEMENT_TYPE_SEQ_ID = {entitlementTypeId}, " +
"LAST_UPDATE_DATE = SYSDATE, " +
$"LAST_UPDATED_BY = {sso} " +
$"WHERE APP_SEQ_ID = {appId} AND BUSINESS_SEQ_ID = {businessId}";
using (var cn = _connectionBuilder.GetUpdaterConnection())
{
using (var cmd = _connectionBuilder.GetCommand(sql, cn))
{
cn.Open();
var transaction = cn.BeginTransaction(IsolationLevel.ReadCommitted);
cmd.Transaction = transaction;
//cmd.Parameters.Add("appId", appId);
//cmd.Parameters.Add("businessId", businessId);
//cmd.Parameters.Add("entitlementTypeId", entitlementTypeId);
//cmd.Parameters.Add("lastUpdatedBy", sso);
var rows = cmd.ExecuteNonQuery();
transaction.Commit();
return rows;
}
}
}
謝謝!這解決了我的問題。我沒有意識到這是默認情況下的綁定。我會很感激鏈接到文檔。 –