我正在对使用 OracleConnection 和 OracleCommand 管理数据的旧应用程序进行一些维护。我遇到了一个问题,即当我使用参数时特定更新不起作用,但如果我将相同的语句转换为插值字符串,它工作正常。我没有得到任何异常,更新只是没有发生,并为更新的行返回 0。我正在使用参数进行其他更新,所以我很好奇是否有人看到我可能错过的任何内容。我尝试过使用/不使用事务以及显式创建 OracleParameter 对象无效。
方法如下。我已将参数化版本和参数设置注释掉以供参考。
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;
}
}
}