0

我正在尝试datagridview使用DateTimePickercontrol对我的数据库数据进行排序date column,我的Event_test表中的类型是datetime2

SqlDataAdapter sda = new SqlDataAdapter("SELECT * from Event_test where date between '"
                     +dateTimePicker1.Value.ToString()+"' AND'"+dateTimePicker2.Value.ToString()+ "'", con);
            DataTable data = new DataTable();
            sda.Fill(data);
            dataGridView1.DataSource = data;

此解决方案无法正常工作,它第一次对数据进行错误排序,当我更改时间选择器时会发生此错误:

从字符串转换日期和/或时间时转换失败

任何帮助表示赞赏。

那么我该如何调整select statement以获得我需要的东西呢?

看起来dateTimePicker1dateTimePicker2 都是不变的;它们设置为 2016 年 1 月 10 日和 2016 年 10 月 10 日,每当我更改日期时,它都会显示这些日期之间的结果!

4

1 回答 1

0

您确实需要格式化日期字符串以匹配 SQL-Server 的格式:

string sqlFormat = "yyyy-MM-dd HH:mm:ss.fff";

String query = "SELECT * from Event_test where date between '"
            + dateTimePicker1.Value.ToString(sqlFormat) + "' AND'" 
            + dateTimePicker2.Value.ToString(sqlFormat) + "'";

更好的选择是使用 Sql 参数(尽量避免查询字符串连接):

var sda = new SqlDataAdapter("SELECT * from Event_test where [date] between @p1 AND @p2", con);

SqlParameter dateParamFrom = new SqlParameter("@p1", SqlDbType.DateTime2);
dateParamFrom.Value = dateTimePicker1.Value;
SqlParameter dateParamTo = new SqlParameter("@p2", SqlDbType.DateTime2);
dateParamTo.Value = dateTimePicker2.Value;

sda.SelectCommand.Parameters.Add(dateParamFrom);
sda.SelectCommand.Parameters.Add(dateParamTo);
于 2016-07-09T15:03:17.523 回答