C# 事务对象未与连接对象-OracleClient关联

C# 事务对象未与连接对象-OracleClient关联,c#,wcf,transactions,oracleclient,oledbdataadapter,C#,Wcf,Transactions,Oracleclient,Oledbdataadapter,我正在处理的一个Web服务再次出现这个问题。 我正在使用事务和使用数据适配器的批处理更新。除此之外,我还使用Oracle命令生成器获取我分配给dataadapter的insert/delete/update命令 下面是从我的服务中提取的一些代码;并使用错误行: 注意-我正在发布从我的源代码中提取的代码: OracleTransaction trx = null; if ((Transaction.Current.TransactionInformation.DistributedIdentifi

我正在处理的一个Web服务再次出现这个问题。 我正在使用事务和使用数据适配器的批处理更新。除此之外,我还使用Oracle命令生成器获取我分配给dataadapter的insert/delete/update命令

下面是从我的服务中提取的一些代码;并使用错误行:

注意-我正在发布从我的源代码中提取的代码:

OracleTransaction trx = null;
if ((Transaction.Current.TransactionInformation.DistributedIdentifier == Guid.Empty))
                {
                    con.ConnectionString = con.ConnectionString + ";enlist=false"; ;
                    con.Open();
                    trx = con.BeginTransaction();
                    cmd.Transaction = trx;
                }

                try
                {
                    dsEmpData.AcceptChanges();
                    for (int i = 0; i < dsEmpData.Tables[0].Rows.Count; i++)
                    {
                        dsEmpData.Tables[0].Rows[i].SetAdded();
                    }
                    OracleCommandBuilder cb = new OracleCommandBuilder();
                    string SQL
                            = "--MY SELECT COMMAND. REMOVED BECAUSE IT IS NOT NECESSARY IN THIS BLOCK";

                    OracleDataAdapter da = new OracleDataAdapter(SQL, ConnectionString);
                    OracleCommandBuilder cmdInsert = new OracleCommandBuilder(da);
                    dsEmpData.Tables[0].TableName = "TABLENAME".ToUpper();

                    if ((Transaction.Current.TransactionInformation.DistributedIdentifier == Guid.Empty))
                    {
                        da.SelectCommand.Transaction = trx;
                        da.InsertCommand = cmdInsert.GetInsertCommand();//ERROR LINE
                        da.InsertCommand.Transaction = trx;
                    }
                    da.Update(dsEmpData, "TABLENAME".ToUpper());
                    if (trx != null)
                    { trx.Commit(); }
                }
                catch (Exception ex)
                {
                    if (trx != null)
                    { trx.Rollback(); }
                    throw new FaultException("MY MESSAGE " + ex.Message);
                }
oracletransactiontrx=null;
if((Transaction.Current.TransactionInformation.DistributeIdentifier==Guid.Empty))
{
con.ConnectionString=con.ConnectionString+“登记=false”;
con.Open();
trx=con.BeginTransaction();
cmd.Transaction=trx;
}
尝试
{
dsEmpData.AcceptChanges();
对于(int i=0;i
因此,如上所述-我在上述行中得到异常“事务对象与连接对象不关联”:da.InsertCommand=cmdInsert.GetInsertCommand()

在这件事上的任何帮助都将不胜感激。如果你需要更多的信息,请告诉我


提前感谢。

这是因为事务属于在代码第5行中创建的名为con的连接。但是,OracleDataAdapter与该连接不关联。您给它的是连接字符串,而不是连接。这意味着它将创建自己的连接

然后,将与上一个连接关联的事务提供给这个适配器。这行不通!您必须将数据适配器与事务的相同连接相关联。您可以将适配器与原始连接相关联,或者从适配器的连接创建事务;一个或另一个会起作用


干杯——

Woah——这也许是可能的!让我检查一下,我会再给你回复。Thx的答案对于理解我们在第三方软件方面的问题有很大帮助。