如何在C++ ODBC中使用多个记录集

问题描述:

我想简化将信息存储在多个表中并将它们链接到中央表的复杂过程。链接使用每个表中生成的IDENTITY值提供唯一链接。我知道我可以使用SET NOCOUNT ON和SELECT @@ identity的组合来获取每个标识,但这仍然要求我为每个表调用一个单独的SQLExecute()。我读过几十篇文章,说ADO可以使用ODBC驱动程序处理多个记录集,所以问题是如何在没有ADO的情况下执行此操作?如何在C++ ODBC中使用多个记录集

我已经将类似行为的所有标准ODBC东西封装到ADO中。我基本上只需要知道ODBC API调用将允许我重新创建ADO的NextRecorset()。

我正在使用MS SQL 7和MS SQL 2005的组合,根据需要使用SQL Server ODBC或SQL Native Client驱动程序。

最终目标:

SET NOCOUNT ON; 
INSERT INTO TableA (data) VALUES ('a'); 
SELECT @@identity AS NewID; 
INSERT INTO TableB (data) VALUES ('b'); 
SELECT @@identity AS NewID; 
INSERT INTO TableC (data) VALUES ('c'); 
SELECT @@identity AS NewID; 
... 
RS = DB.OpenRecordset() 
RS.MoveFirst() 
A_ID = RS.GetValue("id") 
RS.NextRecordset() 
RS.MoveFirst() 
B_ID = RS.GetValue("id") 
RS.NextRecordset() 
RS.MoveFirst() 
C_ID = RS.GetValue("id") 

使用SQLMoreResults()调用作为模拟到NextRecordSet()功能。

但是,如果您愿意让您的执行包括INSERT ...; SELECT @@IDENTITY,那么您可能不需要这样做。由于此声明返回的唯一结果是身份,因此您无需打扰SQLMoreResults()