Wie arbeite ich mit mehreren Datensätzen in C ++ ODBC?
-
05-07-2019 - |
Frage
Ich versuche, einen komplexen Prozess des Speichers von Informationen in mehreren Tabellen zu optimieren und sie mit einer zentralen Tabelle zu verknüpfen. Die Verknüpfung erfolgt unter Verwendung von Identitätswerten, die in jeder Tabelle erzeugt werden, um die eindeutige Verknüpfung bereitzustellen. Ich weiß, dass ich eine Kombination aus Set Nocount auf und aus auswählen kann @@ Identity, um jede Identität zu erhalten, aber das erfordert immer noch, dass ich für jede Tabelle einen separaten SQLEXecute () aufrufen kann. Ich habe Dutzende von Artikeln gelesen, in denen ADO mithilfe eines ODBC -Treibers mehrere Datensätze verarbeiten kann. Die Frage ist also, wie ich es ohne ADO mache.
Ich habe bereits alle Standard -ODBC -Dinge für ein ähnliches Verhalten wie ADO verkapuliert. Im Grunde muss ich nur wissen, welche ODBC -API -Anrufe es mir ermöglichen, ADOs NexTrecorset () neu zu erstellen.
Ich arbeite an einer Kombination von MS SQL 7 und MS SQL 2005, wobei entweder die SQL Server ODBC oder die SQL Native Client -Treiber verwendet werden.
Endziel:
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")
Lösung
Verwenden Sie das SQLMoreResults()
Rufen Sie als Analog zum Analog an NextRecordSet()
Funktion.
Sie brauchen das jedoch wahrscheinlich nicht, wenn Sie bereit sind, Ihre Executes bestehen zu lassen INSERT ...; SELECT @@IDENTITY
Da das einzige Ergebnis aus dieser Aussage die Identität ist, müssen Sie sich nicht mit dem beschäftigen SQLMoreResults()
.