gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 22:09:53 25 4
gpt4 key购买 nike

我正在处理的其中一个 Web 服务遇到了这个反复出现的问题。我正在使用数据适配器使用事务和批量更新。除此之外,我还使用 Oracle Command Builder 获取我分配给数据适配器的插入/删除/更新命令。

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

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

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();

我们将不胜感激任何对此问题的帮助。如果您需要更多信息,请告诉我。

提前致谢。

最佳答案

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

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

干杯-

关于c# - 事务对象未与连接对象相关联 - OracleClient,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21258231/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com