يبدو أن Oraclecommand يحول التواريخ الحرفية
-
02-10-2019 - |
سؤال
لقد قمت ببناء أداة استعلام صغيرة لـ Oracle باستخدام Oraclecommand و OracledataAdapter. يقوم المستخدمون فقط بإدخال استعلام كامل (لا توجد معلمات) ، وتنفيذها وتظهر النتائج في DataGridView. حتى الآن جيد جدًا ، على الرغم من أنني جربت استعلامًا غير صالح ، على سبيل المثال:
SELECT * FROM mytable WHERE dateColumn = '1-JAN-10'
هذا الاستعلام غير صالح SQL لـ Oracle. يجب عليك استخدام وظيفة TO_DATE () لمقارنة مع الحرفية التاريخ. يرفض مطور SQL أيضًا ذلك ، لكن أداة الاستعلام الخاصة بي تعمل بطريقة ما. هل هذا يعني أن Oraclecommand الخاص بي هو بعض المعالج هنا أم أنني أفعل شيئًا خاطئًا؟ أيضًا ، هناك طريقة لحذف هذا السلوك لأن الغرض من الأداة هو اختبار الاستعلامات ، والتي يجب أن تعمل دائمًا ...
شكرًا
المحلول
قد يكون الاستعلام صالحًا لـ Oracle. ليس عليك استخدام to_date()
إذا أعطيت سلسلة التاريخ بتنسيق تاريخ جلستك ، على الرغم من أنه من الأفضل عمومًا القيام بذلك على أي حال لتجنب مشكلات مثل هذه.
يبدو أن لديك مختلفًا NLS_DATE_FORMAT
في بيئة الأداة الخاصة بك إلى تلك في SQL Developer ، أو يتم تعيين تنسيق تاريخ الجلسة ضمنيًا بواسطة Oraclecommand.
تستطيع select value from nls_session_parameters where parameter = 'NLS_DATE_FORMAT'
لمعرفة ما هو عليه من SQL*Plus و SQL Developer ، ومن أدتك ؛ و من nls_database_parameters
لمعرفة ما هو تجاوز قاعدة البيانات الافتراضية.
يبدو أن أداتك قد يكون لها DD-MON-RR
وأنت تتوقع تنسيقًا آخر في مكان آخر ، ولكن دون التحقق من تلك الجداول ، من الصعب تحديد مكان استخدام قاعدة البيانات الافتراضية وأين تتجاوزها على مستوى الجلسة. أعتقد أن هذا هو الافتراضي DB ولديك تجاوز في بيئاتك الأخرى.
من مطور SQL ، حاول alter session set nls_date_format='DD-MON-RR';
ثم أعد تشغيل استعلامك غير الصحيح - يجب أن تعمل هناك أيضًا.