将时间添加到 SQL 日期查询

Adding time to SQL date query

var datadb1 = DateTime.ParseExact(dateTimePicker1.Text, "dd/MM/yyyy", null);
var timedb1 = DateTime.ParseExact(dateTimePicker2.Text, "HH:mm:ss", null);
var datadb2 = DateTime.ParseExact(dateTimePicker3.Text, "dd/MM/yyyy", null);
var timedb2 = DateTime.ParseExact(dateTimePicker4.Text, "HH:mm:ss", null);
commanddb.CommandText =
            "SELECT * FROM testtab WHERE datatime >= @from and datatime < @to";
commanddb.Parameters.AddWithValue("@from", datadb1);
commanddb.Parameters.AddWithValue("@to", datadb2);    

需要为此查询添加时间检查(我正在从 dateTimePicker2 和 dateTimePicker4 获取时间信息)。

Need to add time check to this query

您的代码存在的问题是您仅将要检查的日期部分传递给 SQL 查询。为了使您的查询同时检查日期和时间部分,您必须:

  • 声明数据类型 datetime(SqlDbType.DateTime) 的 SQL 参数。
  • 您传递给 sql 参数的值应该是数据类型 DateTime 并且 包含日期和时间部分的 部分。

实现此目的的一种方法是使用相同的 DateTimePciker 传递日期和时间部分,然后不要使用 datetimepicker Text 属性 并使用 DateTimePicker.Value 属性 相反,它会给你日期和时间部分:

SqlParameter fromParam= new SqlParameter("@from", SqlDbType.DateTime);
fromParam.Value = dateTimePicker1.Value;

SqlParameter toParam= new SqlParameter("@to", SqlDbType.DateTime);
toParam.Value = dateTimePicker2.Value;

commanddb.Parameters.Add(fromParam);
commanddb.Parameters.Add(toParam);

或者,通过将来自不同日期时间选择器的日期部分和时间部分添加到同一个 DateTime 变量,然后再将其传递给 sql 参数。像这样:

var datadb1 = DateTime.Parse(dateTimePicker1.Value.ToShortDateString()); 
var timedb1 = DateTime.Parse(dateTimePicker2.Value.ToShortTimeString());

DateTime datetimeCombined1 = datadb1 + new TimeSpan(timedb1.Hour, 
                                                    timedb1.Minute,
                                                    timedb1.Second);

然后你必须将这个变量datetimeCombined1传递给SQL参数,与第二个日期时间范围相同,你必须在传递之前将两个部分组合起来。

这是假设您使用 dateTimePicker1 仅读取日期部分,使用 dateTimePicker2 仅读取时间部分。

如果您想单独使用每个 dateTimePicker 作为日期或时间,您可以定义一个 DateTime 变量并设置其日期值和时间值,如下所示:

    DateTimePicker dateTimePickerFromDate = new DateTimePicker();
    DateTimePicker dateTimePickerFromTime = new DateTimePicker();
    DateTimePicker dateTimePickerToDate = new DateTimePicker();
    DateTimePicker dateTimePickerToTime = new DateTimePicker();

    DateTime fromDateTime = new DateTime(dateTimePickerFromDate.Value.Year, 
        dateTimePickerFromDate.Value.Month, dateTimePickerFromDate.Value.Day, 
        dateTimePickerFromTime.Value.Hour, dateTimePickerFromTime.Value.Minute, 
        dateTimePickerFromTime.Value.Second);

    DateTime toDateTime = new DateTime(dateTimePickerToDate.Value.Year, 
        dateTimePickerToDate.Value.Month, dateTimePickerToDate.Value.Day, 
        dateTimePickerToTime.Value.Hour, dateTimePickerToTime.Value.Minute, 
        dateTimePickerToTime.Value.Second);

    commanddb.CommandText =
    "SELECT * FROM testtab WHERE datatime >= @from and datatime < @to";
    commanddb.Parameters.AddWithValue("@from", fromDateTime);
    commanddb.Parameters.AddWithValue("@to", toDateTime);