あることがわかりました 問題を回避する別の方法!同僚の従業員が私の一日を節約して、次のようなブログを紹介してくれました。
DbConnectionでBeginTransactionがすでに呼び出されている場合は、パラメータ値を設定します。
もっと簡単でしょうか?ブログは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();
}