Tôi thấy rằng có có một cách khác để giải quyết vấn đề! Đồng nghiệp của tôi đã tiết kiệm thời gian trong ngày khi chỉ tôi đến blog này, có nội dung:
Đặt giá trị tham số khiBeginTransaction đã được gọi trên DbConnection.
Nó có thể được đơn giản hơn? Blog liên quan đến Oracle.DataAccess
, nhưng nó cũng hoạt động tốt cho System.Data.OracleClient
.
Trong thực tế, điều này có nghĩa là:
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();
}