sql 服务器 - 如何在 ODBC 中使用C++多个记录集

sql server - How do I work with Multiple Recordsets in C++ ODBC

本文关键字:C++ 记录 服务器 ODBC sql      更新时间:2023-10-16

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

我已经封装了所有标准 ODBC 内容,以实现与 ADO 类似的行为。 我基本上只需要知道哪些 ODBC API 调用将允许我重新创建 ADO 的 NextRecorset()。

我正在研究MS SQL 7和MS SQL 2005的组合,根据需要使用SQL Server ODBC或SQL Native Client Drivers。

最终目标:

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()而烦恼。