English 中文(简体)
BindingSource按日期筛选
原标题:
  • 时间:2008-12-30 13:49:05
  •  标签:

我想根据日期从数据库中筛选值。

Date in a database contains values like this: 2008-12-28 18:00:00. And my class has a DateTime variable depending on which I want to filter. Ideally it would work like this: myBindingSource.Filter = "DATE(myDateField) = myDateTime.Date" + adjusting myDateTime.Date format as needed.

但它抛出了一个EvaluateException:“表达式包含未定义的函数调用DATE()。”

尽管如果我直接执行SQL语句,我可以在过滤器中使用DATE()函数。

附言:我将MYSQL数据库与连接器/Net 5.2一起使用

我该如何解决这个问题?

谢谢大家的建议。

最佳回答

不需要getSqlDate函数。您可以使用String.Format()设置日期格式:

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

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";
}

A correction to the answer: Accoring to msdn ,to get the correct date the mm in

yyyy-mm-dd

would have to be capitalized like so;

yyyy-MM-dd

获取正确格式的日期。

我的日期字段是数据集中的字段名称吗?我想您想要这样的表达式:

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

你是在问如何在筛选器中消除日期时间的时间部分吗?我对MySQL不是太熟悉,但如果你使用任何返回datetime的日期部分的函数,那么你很可能会破坏该列用于查询的任何索引的机会(现有或未来的索引)。

你最好的选择是在前端创建一个过滤器,检查仅适用于你所设定的过滤日期的范围。例如:

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#技能不足,需要我花更多时间来编写函数,但你可能比我快得多。 :)

要在DataGridView中搜索两个日期之间,您可以使用此代码:

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 .

成功 "Arn_7"

要在DataGridView中搜索两个日期之间,您可以使用以下代码:

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 .

你需要像这样加入单引号 "2021-09-26"。

myBindingSource.Filter = "myDateField = " + " " + myDateTime.Date.ToString("yyyy-MM-dd") + " "




相关问题
热门标签