【发布时间】:2010-08-16 15:56:25
【问题描述】:
我的系统将一些数据写入 SQL Server DB (2008),稍后将其提取并进一步处理,然后再将其写入 Oracle (10g) DB。
我已经将我的 SQL Server 交互封装在 TransactionScope 中,但是当我尝试对我的 Oracle 交互进行同样的思考时,我得到一个 `TranactionAbortedException - “事务已中止”。
移除 TransactionScope,一切正常。
我总是可以恢复手动管理自己的交易,但我希望有一个简单的解决方案。
示例代码:
private static void OracleTest()
{
using (TransactionScope ts = new TransactionScope())
{
using (OracleConnection conn = new OracleConnection(connString))
{
try
{
using (OracleCommand cmd = new OracleCommand())
{
cmd.CommandText = "MyPackage.MyFunction";
cmd.CommandType = System.Data.CommandType.StoredProcedure;
cmd.Connection = conn;
OracleParameter param = cmd.Parameters.Add(new OracleParameter("field1_", "abc123"));
param = cmd.Parameters.Add(new OracleParameter("rs_", OracleType.Cursor));
param.Direction = System.Data.ParameterDirection.Output;
conn.Open();
using (OracleDataReader dr = cmd.ExecuteReader())
{
我没有发现任何建议您不能将 TransactionScopes 与 Oracle 一起使用,但正如您从我的示例中看到的那样,我们正处于第一个障碍(当我们打开连接时),所以很难看到我可能会出错的地方。
【问题讨论】:
标签: c# transactions oracle10g transactionscope