如何在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()
。