Я занимаюсь некоторым обслуживанием в устаревшем приложении, использующем OracleConnection и OracleCommand для управления нашими данными. У меня возникла проблема, когда определенное обновление не работает, когда я использую параметры, но если я конвертирую один и тот же оператор в интерполированную строку, он работает нормально. Я не получаю никаких исключений, обновления просто не происходит, и возвращает 0 для обновленных строк. Я делаю другие обновления с параметрами, поэтому мне интересно, если кто-нибудь увидит что-то, что я мог пропустить с этим. Я попытался с/без транзакции, а также явно создавал объекты OracleParameter без каких-либо последствий.OracleCommand Update работает с интерполированным 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;
}
}
}
Спасибо! Это устранило мою проблему. Я не понимал, что по умолчанию он привязывается по положению. Буду признателен за ссылку на документы. –