如何在Informix CSDK和OIC ++中使用事务 [英] How to use transactions in Informix CSDK and OIC++

查看:167
本文介绍了如何在Informix CSDK和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>

来自 Informix C ++ DocNotes



现在可以对抓取的行中的大对象执行操作连接仍然被检出(锁定)。在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...

from Informix C++ DocNotes

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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆