sql >> Database teknologi >  >> RDS >> Oracle

Problemer med at kalde lagret procedure fra C# med stor CLOB

Jeg fandt ud af, at der er en anden måde at løse problemet på! Min medarbejder reddede min dag ved at pege mig på denne blog, hvor der står:

Indstil parameterværdien, når BeginTransaction allerede er blevet kaldt på DbConnection.

Kunne det være enklere? Bloggen relaterer til Oracle.DataAccess , men det fungerer lige så godt for System.Data.OracleClient .

I praksis betyder det:

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. Mangler ved mysql_real_escape_string?

  2. Sådan grupperes efter år i SQL

  3. Få top n poster for hver gruppe af grupperede resultater

  4. Find det refererede tabelnavn ved hjælp af tabel-, felt- og skemanavn