我当前的应用程序将所有数据库操作都放在一个巨大的using语句中,并带有一个连接,以确保事务完全提交或回滚,当前,如果我有通用方法,它们将传递当前打开的OleDbConnection以便使用。
我想使用TransactionScope代替外部using部分。请在下面查看我的测试代码:
private void Test() {
string _connectionString = "Provider=OraOLEDB.Oracle.1;Password=XXXXXXXX;Persist Security Info=True;User ID=XXXXXXXX;Data Source=XXXXXXX;min pool size=1;incr pool size=5;decr pool size=2;connection timeout=60;";
using (TransactionScope _ts = new TransactionScope(TransactionScopeOption.Required))
{
using (OleDbConnection _cn = new OleDbConnection(_connectionString))
{
_cn.Open(); // Errors Here!
using (OleDbCommand _cmd = new OleDbCommand())
{
_cmd.Connection = _cn;
_cmd.CommandText = "insert into testtable (TEST) values ('FIRST')";
_cmd.CommandType = CommandType.Text;
_cmd.ExecuteNonQuery();
}
}
using (OleDbConnection _cn = new OleDbConnection(_connectionString))
{
_cn.Open();
using (OleDbCommand _cmd = new OleDbCommand())
{
_cmd.Connection = _cn;
_cmd.CommandText = "insert into testtable (TEST) values ('SECOND')";
_cmd.CommandType = CommandType.Text;
_cmd.ExecuteNonQuery();
}
}
}
}
我收到的错误是“无法参加交易。” 我已经读到Oracle不喜欢使用TransactionScope(TransactionScope和Oracle的问题),但是它似乎符合我需要实现的目标。我发现关于如何跨连接池连接桥接单个事务的信息很少。
编辑-2月11日
我从OleDB切换到ODP.Net,并设法得到一个正式的Oracle ORA错误。
ORA-02048: attempt to begin distributed transaction without logging on
从我发现的可悲的是,我认为这是一个Oracle错误?我发现论坛帖子暗示10.2.0.2版存在此错误,但是我在10.2.0.4上吗?
希望有人可以帮忙!谢谢
因此,我的回答有两点:
首先,我需要在客户端上安装OracleMTS服务。其次,我从OleDB(通过Oracle.ManagedDataAccess v12)更改为Oracle.DataAccess v11,它可以正常工作!
我发现ODP.Net客户端的v12版本和10.2.0.4版本存在一个错误,即分布式事务失败,但是版本11可以运行。仍然感到困惑,为什么它不能与OleDB一起使用,但是我现在已经解决了。希望这可以帮助其他人担任我的职务!
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句