sql >> Base de Datos >  >> RDS >> Oracle

Problemas al llamar al procedimiento almacenado desde C# con un CLOB grande

Descubrí que hay es otra forma de solucionar el problema! Mi compañero de trabajo me salvó el día señalándome este blog, que dice:

Establezca el valor del parámetro cuando ya se haya llamado a BeginTransaction en DbConnection.

¿Podría ser más sencillo? El blog se relaciona con Oracle.DataAccess , pero funciona igual de bien para System.Data.OracleClient .

En la práctica esto significa:

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