【发布时间】:2016-02-10 10:28:16
【问题描述】:
我当前的应用程序在一个带有连接的巨型 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 (Problems with TransactionScope and 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 上?
希望有人可以提供帮助!谢谢
【问题讨论】:
标签: c# oracle transactions oledb connection-pooling