当我运行下面的代码我得到的BeginTransaction需要打开连接。连接的当前状态为打开,执行
“的BeginTransaction需要一个开放的连接,该连接的 当前状态为开启,执行”
例外。
using (var con = new IBM.Data.DB2.DB2Connection(
"Server=localhost;Database=SAMPLE;UID=***;PWD=***;"))
{
con.Open();
var c = con.CreateCommand();
c.CommandText = "select * from DB2TEST";
using (var r = c.ExecuteReader())
{
r.Read();
con.BeginTransaction();// The exception is thrown here!!!
}
}
我知道,如果我将Begin事务移动到代码中的较早时间,它将起作用 - 但这并不会削减它。 我需要迭代一个非常大的阅读器,并根据需要打开和关闭事务。
我试过ExecuteResultSet - 但得到了同样的行为。
显然你需要在ExecuteReader之前开始事务。你是什么意思“按我想要的开放和关闭交易”。 – Phil 2013-03-17 09:36:42
我需要在阅读时打开一个事务。 Oracle支持这一点。 使用SQL服务器我使用服务器端游标 – Noam 2013-03-17 10:51:03
甚至无法在未打开的数据读取器上进行事务更新。需要单独的更新命令。需要注意的是DataReader会抓取多行以获得速度,因此如果更新下一行,您可能会从DataReader中获取陈旧的数据。我在这种情况下使用服务器游标,因为它不会遭受陈旧的数据。 – Paparazzi 2013-03-17 17:02:00