我的系统将一些数据写入SQL Server数据库(2008),稍后将其提取并进行处理,然后再将其写入Oracle(10g)数据库。
我已经在TransactionScope中包装了我的SQL Server交互,但是当我尝试使用我的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())
{
我没有发现任何暗示你不能在Oracle上使用TransactionScopes的东西,但正如你从我的例子中看到的那样,我们正处于第一道障碍(当我们打开连接时),所以很难看到我可能会出错的地方。
答案 0 :(得分:4)
你可能想看看这个;我对Oracle 10g中的TransactionScope运气不错:http://forums.oracle.com/forums/thread.jspa?messageID=4127323