当Oracle Transaction.Rollback不起作用时,我的一个客户面临一个奇怪的问题。
似乎必须使用以下内容:
即使已经调用了回滚,这两个项目仍然会插入到数据库中。
任何人都知道为什么会发生这种行为?
using (var connection = new OracleConnection(ConfigurationManager.ConnectionStrings["OracleCodeFirstEntities"].ConnectionString))
{
connection.Open();
var transaction = connection.BeginTransaction();
using (var command = connection.CreateCommand())
{
command.BindByName = true;
command.CommandText = @"
BEGIN
INSERT INTO ""SYSTEM"".""EF_0104"" (""IntColumn"") VALUES(:P_0) RETURNING ""ID"" INTO :ZZZOUTPUT_0;
END;
";
int[] array = new int[] { 1, 2 };
var param1 = command.CreateParameter();
param1.ParameterName = "P_0";
param1.DbType = DbType.Int32;
param1.Value = array;
var param2 = command.CreateParameter();
param2.Direction = ParameterDirection.Output;
param2.ParameterName = "ZZZOUTPUT_0";
param2.DbType = DbType.Int32;
param2.Value = array;
command.Parameters.Add(param1);
command.Parameters.Add(param2);
command.ArrayBindCount = array.Length;
command.ExecuteNonQuery();
}
transaction.Rollback();
}
添加其他信息
如果在transaction.Rollback()
之前有异常
不,回滚成功完成且没有错误。
如果我只使用数组中的一个项目,则会发生回滚,如果我在没有返回语句的情况下执行回滚,则会发生回滚,但如果发生这种情况,则不会发生回滚。
您正在使用哪个数据库提供程序
我使用过Oracle.ManagedDataAccess(v4.121.2.0)
问题可能是自动提交已启用吗?
我不认为这是问题,因为如果我删除其中一个变体,则回滚可以正常工作。
我将在明天检查;我现在对Oracle不太熟悉。你有没有开启oracle追踪