هل تستخدم مكتبة قاعدة بيانات C ++ OTL SQL الاستعلامات المعلمة تحت الغطاء ، أو Concat؟
-
01-10-2019 - |
سؤال
لقد كنت أبحث في مكتبة قالب OTL (ORACLE و ODBC و DB2-CLI) للوصول إلى قاعدة بيانات C ++. لست متأكدًا مما إذا كان الاستعلام الذي أجري فيه يتم تحويله إلى استعلام معلم لقاعدة البيانات الأساسية ، أو إذا كان في الأساس تسلسل جميع الوسيطات في سلسلة كبيرة واحدة وتمرير الاستعلام إلى قاعدة البيانات بهذه الطريقة. أرى أن الاستعلام الذي تنقله إليه يمكن أن يشمل معلومات النوع للوسائط ، ولكن ما يحدث بين ذلك الحين والاستعلام الذي يضرب قاعدة البيانات ، لا يمكنني معرفة ذلك.
المحلول
رد مؤلف OTL على بريدي الإلكتروني:
يمر OTL باستعلامات مع أصحاب نائبة في طبقات API DB. تختلف اتفاقيات التسمية لمتغيرات الربط الفعلي لأنواع DB المختلفة. قل ، لأوراكل ،
SELECT * FROM staff WHERE fname=:f_name<char[20]>
سيتم ترجمته إلى:
SELECT * FROM staff WHERE fname=:f_name
بالإضافة إلى مجموعة من مكالمات ربط المتغير المضيف.
بالنسبة إلى MS SQL Server ، أو DB2 ، سيبدو نفس SELECT هكذا:
SELECT * FROM staff WHERE fname=?
تم وصفه في الدليل أنه لا يمكن أن يكون لديك عنصر نائب له نفس الاسم أكثر من مرة للسيدة SQL ، DB2. تعتبر عبارات SQL ذات المتغيرات النائبة / BIND مكلفة نسبيًا ، لذلك إذا قمت بتسهيل SQL المعلمة عبر OTL_STREAM ، فمن المنطقي إعادة استخدام الدفق قدر الإمكان.
إذا كان لديك المزيد من الأسئلة ، أو اقتراحات حول كيفية تحسين دليل OTL ، فلا تتردد في مراسلتي عبر البريد الإلكتروني.
هتاف ، سيرجي
كتب Pheadbaq:
مرحبًا ، لقد قمت بتقييم مكتبات C ++ DB مؤخرًا لاستخدامها كقاعدة لمكتبة ORM التي أرغب في بنائها ، وأجذب أكثر فأكثر نحو OTL. بالمناسبة يبدو لطيفًا جدًا ، ويبدو أنه سيفي بمعظم الاحتياجات التي لدي. لدي فقط سؤال واحد باقي لا يمكنني توضيحه من خلال قراءة المستندات. هل تمرير OTL استعلامًا معتمدًا إلى DBMs الأساسي ، أم أنه يسلط الوسيطات والاستعلام الذي أرفقه إلى دفق OTL في سلسلة واحدة ويده إلى DBMs؟
بمعنى آخر ، إذا قمت بتسليم هذا الاستعلام MSSQL ، إلى جانب السلسلة "بوب" كمتغير ربط:
SELECT * FROM staff WHERE fname = :f_name<char[20]>
هل ينتج محلل OTL هذا:
SELECT * FROM staff WHERE fname = 'Bob'
أو هذا:
SELECT * FROM staff WHERE fname = @f_name
جنبا إلى جنب مع سلسلتي كمعلمة
لقد نشرت هذا السؤال نفسه على Stackoverflow.com إذا كنت تهتم بالرد هناك:هل تستخدم مكتبة قاعدة بيانات C ++ OTL SQL الاستعلامات المعلمة تحت الغطاء ، أو Concat؟
شكرا لوقتك
نصائح أخرى
وثائق يتحدث كل شيء عن متغيرات الربط. أفترض أن المكتبة هو إعادة كتابة استعلامك ، ولكن من المحتمل أن تغير تنسيق متغيرات الربط في التنسيق الذي تتوقعه DBMS الخاص بك ، ثم ربط القيم بمتغيرات الربط.