我正在处理的Web服务中,有一个重复出现的问题。我正在使用事务处理和使用数据适配器的批处理更新。除此之外,我还使用Oracle命令生成器获取我分配给数据适配器的插入/删除/更新命令。
下面是从我的服务中提取的一些代码,并带有错误行:
请注意-我正在发布从我的源代码中提取的代码:
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();
如能在此问题上提供任何帮助,将不胜感激。如果你需要更多的信息,请告诉我。
提前谢谢。
发布于 2014-01-21 12:53:36
这是因为事务属于称为con的连接,它是在代码的第5行中创建的。但是,OracleDataAdaptor与该连接没有关联。你给它连接字符串,而不是连接。这意味着它将创建自己的连接。
然后给这个适配器与前一个连接相关联的事务。这没用的!您必须将数据适配器与与事务相同的连接关联起来。您可以将trhe适配器与原始连接相关联,也可以从适配器的连接创建事务;其中一个可以工作。
干杯-
https://stackoverflow.com/questions/21258231
复制相似问题