मैंने पाया कि वहाँ है समस्या को हल करने का दूसरा तरीका! मेरे साथी कर्मचारी ने मुझे इस ब्लॉग की ओर इशारा करते हुए अपना दिन बचाया, जो कहता है:
<ब्लॉककोट>पैरामीटर मान सेट करें जबBeginTransaction पहले ही DbConnection पर कॉल किया जा चुका हो।
क्या यह आसान हो सकता है? ब्लॉग Oracle.DataAccess
. से संबंधित है , लेकिन यह ठीक वैसे ही काम करता है जैसे System.Data.OracleClient
।
व्यवहार में इसका अर्थ है:
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();
}