Ich mache einige Wartungsarbeiten an einer Legacy-App, die OracleConnection und OracleCommand zur Verwaltung unserer Daten verwendet. Ich habe ein Problem, bei dem ein bestimmtes Update nicht funktioniert, wenn ich Parameter verwende, aber wenn ich dieselbe Anweisung in eine interpolierte Zeichenfolge umwandle, funktioniert es gut. Ich bekomme keine Ausnahmen, das Update passiert einfach nicht, und gibt eine 0 für Zeilen aktualisiert. Ich mache andere Aktualisierungen mit Parametern, also bin ich neugierig, wenn jemand etwas sieht, das ich mit diesem vielleicht verpasst habe. Ich habe versucht, mit/ohne die Transaktion sowie explizit OracleParameter Objekte ohne Wirkung zu erstellen.OracleCommand Update funktioniert mit interpoliertem SQL, aber nicht mit parametrisierten
Die Methode ist unten. Ich habe die parametrierte Version verlassen und die Parametereinstellung als Referenz auskommentiert.
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;
}
}
}
Vielen Dank! Das hat mein Problem behoben. Ich war mir nicht bewusst, dass es standardmäßig per Position gebunden war. Ich schätze den Link zu den Dokumenten. –