我有一个DataGridView和一个搜索框,我可以在其中搜索特定列中的不同日期。现在,由于日期格式化为字符串,他会给我错误的顺序:
我输入20并获得:
2014年10月20日,
2014年9月22日,
2014年11月24日
等等。我在这里读到了另一个关于这个问题的帖子,但解决方案并没有帮助我。我的SQL语句如下所示:
DataTable datTable = new DataTable();
sqlCmd = new SqlCommand("SELECT ["+form1.timeBox.Text+ "] FROM [" + form1.getTableName() + "] WHERE convert(varchar(10),[" + form1.getTimeCol() + "],104) >= '" + form1.getFromDate().Trim() + "' ORDER BY convert(varchar(10),[" + form1.getTimeCol() + "],104) ASC", connection);
sqlDatAdapter = new SqlDataAdapter(sqlCmd.CommandText, connection);
sqlDatAdapter.Fill(datTable);
form1.setDataGrid = datTable;
和
form1.getFromDate()
是从文本框中搜索输入的字符串以搜索的函数。我试图转换并转换为datetime等,但它仍然以错误的顺序显示。有人可以帮忙吗?
答案 0 :(得分:1)
而不是使用'> ='使用'喜欢'运算符'%'你的" form1.getFromDate()结束时的字符.Trim()",它将为你提供所需的结果。
使用'喜欢'您的查询将如下所示:
sqlCmd = new SqlCommand("SELECT ["+form1.timeBox.Text+ "] FROM [" + form1.getTableName() + "] WHERE convert(varchar(10),[" + form1.getTimeCol() + "],104) Like '" + form1.getFromDate().Trim() + "%' ORDER BY convert(varchar(10),[" + form1.getTimeCol() + "],104) ASC", connection);
答案 1 :(得分:1)
您按格式化列排序;没有必要这样做,这是造成问题的部分。
我反对字符串连接来构建sql命令,但你的代码应该按如下方式重写:
sqlCmd = new SqlCommand("SELECT ["+form1.timeBox.Text+ "] FROM [" + form1.getTableName() + "] WHERE convert(varchar(10),[" + form1.getTimeCol() + "],104) >= '" + form1.getFromDate().Trim() + "' ORDER BY " + form1.getTimeCol() + " ASC", connection);