向SQL日期查询添加时间

本文关键字:添加 时间 查询 日期 SQL | 更新日期: 2023-09-27 18:17:13

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获取时间信息)。

向SQL日期查询添加时间

需要在此查询中添加时间检查

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

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

实现这一目标的一种方法是使用相同的datetimepicker来传递日期和时间部分,然后不要使用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);

或者,在传递给sql参数之前,将来自不同datetimepickers的日期部分和时间部分添加到同一个DateTime变量中。像这样:

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);