Как мне работать с несколькими наборами записей в C ++ ODBC

StackOverflow https://stackoverflow.com/questions/179907

  •  05-07-2019
  •  | 
  •  

Вопрос

Я пытаюсь упростить сложный процесс хранения информации в нескольких таблицах и их привязки к центральной таблице. Связывание происходит с использованием значений IDENTITY, сгенерированных в каждой таблице, чтобы обеспечить уникальное связывание. Я знаю, что могу использовать комбинацию SET NOCOUNT ON и SELECT @@ identity, чтобы получить каждую идентификацию, но для этого все равно требуется, чтобы я вызывал отдельный SQLExecute () для каждой таблицы. Я прочитал десятки статей о том, что ADO может обрабатывать несколько наборов записей с помощью драйвера ODBC, поэтому вопрос заключается в том, как мне это сделать без ADO?

Я уже инкапсулировал все стандартные вещи ODBC для поведения, аналогичного ADO. Мне просто нужно знать, какие вызовы ODBC API позволят мне воссоздать ADR NextRecorset ().

Я работаю над комбинацией MS SQL 7 и MS SQL 2005, используя либо ODBC для SQL Server, либо драйверы собственного клиента SQL в зависимости от ситуации.

Конечная цель:

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 () .

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top