سؤال

وأريد لتصفية القيم من قاعدة البيانات على أساس التاريخ.

والتسجيل في قاعدة بيانات يحتوي على قيم مثل هذا: 2008-12-28 18:00:00. وصفي لديها متغير التاريخ والوقت اعتمادا على I تريد تصفيتها. ومن الناحية المثالية انها ستعمل من هذا القبيل: myBindingSource.Filter = "DATE(myDateField) = myDateTime.Date" + تعديل شكل myDateTime.Date حسب الحاجة.

ولكن ذلك يطرح EvaluateException: "يحتوي التعبير تاريخ الدعوة وظيفة غير معروف ()"

وعلى الرغم من أن لو كنت تنفيذ عبارة SQL مباشرة، ويمكن استخدام DATE () وظيفة في التصفية.

وP.S. يمكنني استخدام MYSQL DB مع موصل / صافي 5.2

وكيف يمكنني حل هذه المشكلة؟

وشكرا للجميع الاقتراحات.

هل كانت مفيدة؟

المحلول

لا حاجة إلى وظيفة getSqlDate. يمكنك استخدام String.Format () لمواعيد شكل:

String.Format("{0:yyyy-MM-dd} 00:00:00", myDateTime)

وOR

myDateTime.Date.ToString("yyyy-MM-dd") + " 00:00:00"

هل يمكن تصفية مصدر ملزمة مثل هذا:

myBindingSource.Filter = String.Format("myDateField >= '{0:yyyy-MM-dd}' AND myDateField < '{1:yyyy-MM-dd}'", myDateTime, myDateTime.AddDays(1));

نصائح أخرى

وشكرا توم H.

نعم، كنت أرغب في القضاء على جزء الوقت من التاريخ والوقت في تصفية واقتراحكم يعمل تماما.

وأنا سوف يترك الحل الكامل للآخرين:

myBindingSource.Filter = "myDateField >= '" + getSqlDate(myDateTime) + "' AND myDateField < '" + getSqlDate(myDateTime.AddDays(1)) + "'";

وعندما تكون وظيفة getSqlDate هي:

string getSqlDate(DateTime date) {
    string year = "" + date.Year;
    string month = (date.Month < 10) ? "0" + date.Month : "" + date.Month;
    string day = (date.Day < 10) ? "0" + date.Day : "" + date.Day;

    return year + "-" + month + "-" + day + " 00:00:00";
}

وتصحيح إلى الإجابة: accoring ل MSDN ، للحصول على التاريخ الصحيح وعلى ملم في

yyyy-mm-dd

ويجب أن تكون مكتوبة مثل ذلك؛

yyyy-MM-dd

للحصول على موعد تنسيقه بشكل صحيح.

هل myDateField اسم الحقل في مجموعة البيانات؟ أعتقد أنك تريد تعبير مثل هذا:

myBindingSource.Filter = "myDateField = " & myDateTime.Date.ToString()

وتسأل كيفية القضاء على جزء الوقت من التاريخ والوقت في التصفية؟ أنا لست على دراية جدا مع الخلية، ولكن إذا كنت تستخدم أي نوع من وظيفة يقوم بإرجاع جزء التاريخ من التاريخ والوقت ثم فمن المرجح أن تقضي على أي فرصة لاستخدام فهرس على هذا العمود للاستعلام (مؤشر القائمة أو في المستقبل).

وأفضل رهان هو لإنشاء عامل تصفية على الواجهة الأمامية يتحقق لمجموعة وهذا هو فقط للتاريخ مرشح معين الخاص بك. على سبيل المثال:

myBindingSource.Filter = "myDateField >= " & <code to create a string representing 12AM of your date> &
" myDateField < " & <code to create a string for 12AM of the next day>

وعذرا لعدم وجود كود المحدد، ولكن أنا مطور SQL ولي عدم وجود VB / C # المهارات يتطلب مني أن تأخذ الكثير من الوقت لنخرج مع وظائف ثم فمن المحتمل أن يستغرق لك. :)

لبحث بين اثنين من التاريخ في داتاغريدفيف يمكنك استخدام هذا الرمز:

BindingSource1.Filter = "F5 >= '" + maskedTextBox1.Text + "' And " + "F5 <= '" + maskedTextBox2.Text + "'";

وBindingSource1: بلدي تحميل datasourc داتاغريدفيف في BindingSource1. F5: اسم رأس العمود الخاص في داتاغريدفيف. maskedTextBox1: للحصول على التاريخ الأول. maskedTextBox2: للحصول على الموعد الثاني

وأن النجاح "Arn_7"

لبحث بين اثنين من التاريخ في داتاغريدفيف يمكنك استخدام هذا الرمز:

BindingSource1.Filter = "F5 >= '" + maskedTextBox1.Text + "' And " + "F5 <= '" + maskedTextBox2.Text + "'";

BindingSource1 : my datagridview datasourc load in BindingSource1 .
F5             : name of your header column in datagridview . 
maskedTextBox1 : for get first date .
maskedTextBox2 : for get second date .
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top