如何在Informix CSDK和OIC ++中使用事务 [英] How to use transactions in Informix CSDK and OIC++
问题描述
我需要一些建议如何处理与Informix CSDK和OIC ++的交易。
conn
打开连接对象。选择工作查找。
这是我试过的:
conn.SetTransaction(ITConnection :: BEGIN);
qtext =UPDATE transit_kunde_s SET erledigt ='Y'WHERE transitkunde ='+ ts +';
cout<< qtext<< endl;
code = query_up.ExecForStatus(qtext.c_str());
cout<< code<<代码< endl;
conn.SetTransaction(ITConnection :: COMMIT);
p>
现在可以对抓取的行中的大对象执行操作连接仍然被检出(锁定)。在ITQuery :: ExecForIteration()方法返回结果集中的多行后检出连接。它保持签出,直到结果集中的最后一行已通过ITQuery :: NextRow()获取,或者查询处理已通过调用ITQuery :: Finish()终止。当连接被签出时,不能对该连接执行任何其他查询。
因为我在一个查询结果迭代的while循环中,我需要另一个更新查询新连接
//已有2个连接对象:conn,conn2
ITQuery查询conn);
ITQuery query_up(conn2);
string qtext;
qtext =SELECT * FROM transit_kunde_s WHERE erledigt ='N'ORDER BY transitkunde;
okay = query.ExecForIteration(qtext.c_str());
while(row = query.NextRow()){
// do stuff
//现在想要进行另一个查询吗? - >需要另一个连接!
ok_ta = conn2.SetTransaction(ITConnection :: BEGIN);
qtext =UPDATE transit_kunde_s SET erledigt ='Y'WHERE transitkunde ='+ ts +';
code = query_up.ExecForStatus(qtext.c_str());
ok_ta = conn2.SetTransaction(ITConnection :: COMMIT);
}
//我们稍后看到第一个查询在这里完成
query.Finish();
I'd need some advice how to handle transactions with Informix CSDK and OIC++.
conn
is a open connection object. Select works find. The database here is setup with logging — as I found out while update stmt on its own does nothing.
Here's what I tried:
conn.SetTransaction( ITConnection::BEGIN );
qtext = "UPDATE transit_kunde_s SET erledigt='Y' WHERE transitkunde='"+ts+"'";
cout << qtext << endl;
code = query_up.ExecForStatus(qtext.c_str());
cout << "code " << code << endl;
conn.SetTransaction( ITConnection::COMMIT );
okay once again I answer myself...
Operations can now be performed on large objects within a fetched row even though the connection is still checked out (locked). A connection is checked out after the ITQuery::ExecForIteration() method returns multiple rows in the result set. It remains checked out until either the last row in the result set has been fetched with ITQuery::NextRow() or the query processing has been terminated by calling ITQuery::Finish(). While a connection is checked out, no other query can be executed on that connection.
So as I am in the while loop of one query result iteration I need for another update query a new connection
// already have 2 connection objects: conn, conn2
ITQuery query(conn);
ITQuery query_up(conn2);
string qtext;
qtext = "SELECT * FROM transit_kunde_s WHERE erledigt='N' ORDER BY transitkunde";
okay = query.ExecForIteration(qtext.c_str());
while (row = query.NextRow()) {
// do stuff
// NOW WANT TO DO ANOTHER QUERY? --> NEED ANOTHER CONNECTION!!
ok_ta = conn2.SetTransaction( ITConnection::BEGIN);
qtext = "UPDATE transit_kunde_s SET erledigt='Y' WHERE transitkunde='"+ts+"'";
code = query_up.ExecForStatus(qtext.c_str());
ok_ta = conn2.SetTransaction( ITConnection::COMMIT );
}
// we see later the 1st query to be finished here
query.Finish();
这篇关于如何在Informix CSDK和OIC ++中使用事务的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!