首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >事务对象不与连接对象- OracleClient关联。

事务对象不与连接对象- OracleClient关联。
EN

Stack Overflow用户
提问于 2014-01-21 12:31:25
回答 1查看 5.6K关注 0票数 2

我正在处理的Web服务中,有一个重复出现的问题。我正在使用事务处理和使用数据适配器的批处理更新。除此之外,我还使用Oracle命令生成器获取我分配给数据适配器的插入/删除/更新命令。

下面是从我的服务中提取的一些代码,并带有错误行:

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

代码语言:javascript
复制
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);
                }

因此,如前所述,我得到了上述行上的异常“事务对象与连接对象无关”:da.InsertCommand = cmdInsert.GetInsertCommand();

如能在此问题上提供任何帮助,将不胜感激。如果你需要更多的信息,请告诉我。

提前谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-01-21 12:53:36

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

然后给这个适配器与前一个连接相关联的事务。这没用的!您必须将数据适配器与与事务相同的连接关联起来。您可以将trhe适配器与原始连接相关联,也可以从适配器的连接创建事务;其中一个可以工作。

干杯-

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21258231

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档