هل تستخدم مكتبة قاعدة بيانات C ++ OTL SQL الاستعلامات المعلمة تحت الغطاء ، أو Concat؟

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

  •  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 الخاص بك ، ثم ربط القيم بمتغيرات الربط.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top