C# 将TransactionScope与System.Data.OracleClient一起使用-TransactionBortedException
我的系统在将数据写入Oracle(10g)数据库之前,先将一些数据写入SQL Server DB(2008),然后提取并进一步处理 我已将SQL Server交互打包在TransactionScope中,但当我尝试使用Oracle交互时,我得到了一个“TransactionAbortedException”(“事务已中止”) 卸下TransactionScope,一切正常 我可以随时恢复手动管理自己的事务,但我希望有一个简单的解决方案 示例代码:C# 将TransactionScope与System.Data.OracleClient一起使用-TransactionBortedException,c#,transactions,oracle10g,transactionscope,C#,Transactions,Oracle10g,Transactionscope,我的系统在将数据写入Oracle(10g)数据库之前,先将一些数据写入SQL Server DB(2008),然后提取并进一步处理 我已将SQL Server交互打包在TransactionScope中,但当我尝试使用Oracle交互时,我得到了一个“TransactionAbortedException”(“事务已中止”) 卸下TransactionScope,一切正常 我可以随时恢复手动管理自己的事务,但我希望有一个简单的解决方案 示例代码: private static void Orac
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,但正如您从我的示例中看到的,我们正处在第一个障碍(当我们打开连接时),因此很难看出我可能会出错。您可能想看看这一点;我在Oracle 10g中的TransactionScope方面也不太走运: