سؤال

يمكنني استخدام SQL Server 2008 R2 كمخزن بيانات.

حتى الآن على جهاز الاختبار ، كان لدي الإصدار الإنجليزية من البرنامج واستخدمته لجعل الاستعلامات تنسيق حقل DateTime كـ

fromDate.ToString("MM/dd/yyyy");

لقد قمت الآن بنشر قاعدة البيانات على خادم آخر في اللغة الإيطالية. سأقوم بتغيير التنسيق في الكود الخاص بي إلى

fromDate.ToString("dd/MM/yyyy");

هل هناك طريقة لإجراء الاستعلام بتنسيق محايد؟

شكرًا!

تعديل:

لقد نسيت أن أذكر أنني أستخدم nettiers مع codesmith. إليك عينة كاملة

AppointmentQuery aq = new AppointmentQuery(true, true);
aq.AppendGreaterThan(AppointmentColumn.AppointmentDate, fromDate.ToString("MM/dd/yyyy"));
aq.AppendLessThan(AppointmentColumn.AppointmentDate, toDate.ToString("MM/dd/yyyy"));
AppointmentService aSvc = new AppointmentService();
TList<Appointment> appointmentsList = aSvc.Find(aq);
هل كانت مفيدة؟

المحلول

ISO 8601 عناصر البيانات وتنسيقات التبادل - تبادل المعلومات - تمثيل التواريخ والأوقات يسمح كل من yyyy-mm-dd و yyyymmdd. يتعرف SQL Server على مواصفات ISO.

على الرغم من أن المعيار يسمح لكل من تنسيقات Yyyy-MM-DD و YyyyMMDD بتمثيلات تاريخ التقويم الكاملة ، إذا تم حذف اليوم [DD] ، فسيتم السماح فقط بتنسيق Yyyy-MM. من خلال عدم السماح بتواريخ النموذج Yyyymm ، يتجنب المعيار الارتباك مع التمثيل المقطوع Yymmdd (لا يزال يستخدم في كثير من الأحيان).

أنا أفضل تنسيق Yyyymmdd ، لكنني أعتقد أن هذا لأنني كنت على دراية بذلك فقط ، وبالنسبة لي يبدو الأمر أكثر عالمية ، بعد التخلص من الشخصيات التي يمكن اعتبارها محددة.

نصائح أخرى

يجب عليك مشاركة الكود الذي تستخدمه لتنفيذ الاستعلام ، لكنني أعتقد أنك تقوم ببناء استعلام SQL ديناميكيًا باستخدام CONSATS لإنشاء الاستعلام والوسائط. يجب عليك استخدام استعلام معلمة ، ثم يمكنك تمرير البيانات ككائن تاريخ ولا حاجة لتحويل سلسلة.

على سبيل المثال ، إذا كان استفسارك قد يكون شيئًا من هذا القبيل

DateTime fromDate = DateTime.Now;

SqlCommand cmd = new SqlCommand(
  "select * from Orders where fromDT = @fromDate", con);

cmd.Parameters.AddWithValue("@fromDate", fromDate);

...

كآثار جانبية جيدة ، سيقلل هذا من خطر الإصابة حقن SQL. تحديث: بعد التحرير الذي يغير سياق السؤال بشكل كبير ، وعلي أن أعترف بأن لدي معرفة صفرية بمشروع .nettiers. ولكن بدافع الفضول هل حاولت فقط تمرير مثيلات التاريخ مباشرة كما في ما يلي؟

AppointmentQuery aq = new AppointmentQuery(true, true); 
aq.AppendGreaterThan(AppointmentColumn.AppointmentDate, fromDate); 
aq.AppendLessThan(AppointmentColumn.AppointmentDate, toDate); 
AppointmentService aSvc = new AppointmentService(); 
TList<Appointment> appointmentsList = aSvc.Find(aq); 

شخصيا ، أنا دائما أستخدم yyyy-MM-dd. هذا أيضا يجعلها قابلة للفرز كسلسلة.

ومع ذلك ، فإن التاريخ هو تاريخ. ليست هناك حاجة لتغيير التاريخ إلى سلسلة. في .NET ، المستخدم DateTime.

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