过滤DataTable的DateTime列导致FormatException

本文关键字:FormatException DateTime DataTable 过滤 | 更新日期: 2023-09-27 17:50:44

我有一个DataTable dt绑定到一个DataGridView。我一直在使用标准查询语法在运行时过滤这个网格中的数据。但是,对于这个DataTable中已知的DateTime列,查询

DataRow[] rowArray = dt.Select("DOB >= #01/01/97# AND DOB <= #31/01/97#");

但是这会抛出一个FormatException,消息是:

字符串未被识别为有效的日期时间。

我试过把上面的内容改成

DataRow[] rowArray = dt.Select("DOB >= #01/01/1997# AND DOB <= #31/01/1997#");

但这给出了相同的错误。从MSDN看来,我过滤正确。我可以确认DataTable列'DOB'确实是DateTime类型。

过滤器语句有什么问题?

感谢您的宝贵时间。

过滤DataTable的DateTime列导致FormatException

我唯一能想到的就是区域设置。这似乎你使用GB区域设置。试试这个。

CultureInfo myCultureInfo = new CultureInfo("en-gb");
dt.Locale = myCultureInfo;
DataRow[] rowArray = dt.Select("DOB >= #01/01/1997# AND DOB <= #31/01/1997#");

就像这样将两个DateTime变量传递到您的Select语句中:(根据您在文本框中输入日期的评论,我还添加了一些数据验证)

DateTime startDate;
DateTime endDate;
var isValidStartDate = DateTime.TryParse(txtStartDate.Text, out startDate);
var isValidEndDate = DateTime.TryParse(txtEndDate.Text, out endDate);
if (isValidStartDate && isValidEndDate)
{
    var rowArray = dt.Select(
        string.Format("DOB >= #{0}# AND DOB <= #{1}#", startDate, endDate));
    // do something with rowArray
}
else
{
    // uh-oh...
}