sql >> Databasteknik >  >> RDS >> Oracle

Problem med att anropa lagrad procedur från C# med stor CLOB

Jag upptäckte att det finns ett annat sätt att komma runt problemet! Min kollega räddade min dag genom att peka på den här bloggen som säger:

Ställ in parametervärdet när BeginTransaction redan har anropats på DbConnection.

Kan det vara enklare? Bloggen relaterar till Oracle.DataAccess , men det fungerar lika bra för System.Data.OracleClient .

I praktiken betyder detta:

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


  1. Hur man får en lista över datum mellan två datum i mysql select query

  2. Optimera GROUP BY-fråga för att hämta den senaste raden per användare

  3. Handledning för formulär och rapporter för Oracle 9i, Oracle 10g och Oracle 11g Developer Suite

  4. Oracle PL/SQL-samlingar - Skapa kapslade tabeller i databasen