كيف أعمل مع عدة سجلات في C ++ ODBC
-
05-07-2019 - |
سؤال
أحاول تبسيط عملية معقدة لتخزين المعلومات في جداول متعددة وربطها بجدول مركزي. يحدث الارتباط باستخدام قيم الهوية التي تم إنشاؤها في كل جدول لتوفير الربط الفريد. أعلم أنه يمكنني استخدام مجموعة من مجموعة nocount وتحديد الهوية للحصول على كل هوية ، لكن هذا لا يزال يتطلب مني الاتصال بـ sqlexecute () لكل جدول. لقد قرأت العشرات من المقالات التي تقول إن ADO يمكنها التعامل مع مجموعات تسجيلات متعددة باستخدام برنامج تشغيل ODBC ، وبالتالي فإن السؤال هو كيف أفعل ذلك بدون ADO؟
لقد قمت بالفعل بتغليف جميع أشياء ODBC القياسية لسلوك مماثل مع ADO. أحتاج فقط إلى معرفة ما سيسمح لي مكالمات API ODBC بإعادة إنشاء 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()
.