従来のアプリケーションでは、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;
}
}
}
ありがとうございました!これは私の問題を解決しました。私はそれがデフォルトでポジションを縛っていたことに気付かなかった。私はドキュメントへのリンクを感謝します。 –