向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查询的日期部分。为了使查询同时检查日期和时间部分,您必须:
- 声明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);