Ich fand, dass es gibt eine andere Möglichkeit, das Problem zu umgehen! Mein Kollege hat mir den Tag gerettet, indem er mich auf diesen Blog verwies, in dem es heißt:
Legen Sie den Parameterwert fest, wenn BeginTransaction bereits auf der DbConnection aufgerufen wurde.
Könnte es einfacher sein? Der Blog bezieht sich auf Oracle.DataAccess
, aber es funktioniert genauso gut für System.Data.OracleClient
.
In der Praxis bedeutet dies:
varcmd = new OracleCommand("LoadXML", _oracleConnection);
cmd.CommandType = CommandType.StoredProcedure;
var xmlParam = new OracleParameter("XMLFile", OracleType.Clob);
cmd.Parameters.Add(xmlParam);
// DO NOT assign the parameter value yet in this place
cmd.Transaction = _oracleConnection.BeginTransaction();
try
{
// Assign value here, AFTER starting the TX
xmlParam.Value = xmlWithWayMoreThan4000Characters;
cmd.ExecuteNonQuery();
cmd.Transaction.Commit();
}
catch (OracleException)
{
cmd.Transaction.Rollback();
}