Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Probleme beim Aufrufen einer gespeicherten Prozedur von C# mit großem CLOB

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();
}