Sql DataGridView按错误的顺序排序日期

Sql DataGridView按错误的顺序排序日期,sql,winforms,date,datagridview,Sql,Winforms,Date,Datagridview,我有一个DataGridView和一个搜索框,可以在其中搜索特定列中的不同日期。现在,由于日期被格式化为字符串,他会给我错误的顺序: 我输入20,得到: 2014年10月20日, 2014年9月22日, 2014年11月24日 等等。我在这里读了另一篇关于这个问题的文章,但是解决方案对我没有帮助。我的SQL语句如下所示: DataTable datTable = new DataTable(); sqlCmd = new SqlCommand("SELECT ["+form1.timeBo

我有一个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;


是从文本框中获取要搜索的输入字符串的函数。我试图强制转换为datetime等等,但它仍然以错误的顺序显示。有人能帮忙吗?

n不要在“form1.getFromDate().Trim()”的末尾使用带有“%”字符的“>=”use“Like”运算符,这将为您提供所需的结果

使用“Like”,您的查询将如下所示:

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

按格式化列排序;没有必要这样做,这是造成你问题的部分

我反对使用字符串连接来生成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);

用于对结果集排序的列的数据类型是什么?请发布一些原始数据。该列的数据类型为“日期”。为了搜索它,我将其转换为varchar(见上文)。但是如何让他以正确的顺序显示日期呢?我会在搜索具体日期时使用LIKE。我必须设置“从”和“到”的文本框,所以我必须设置一个范围。在创建示例表之后,我得到了与Paolo相同的答案。哇!这似乎有帮助。非常感谢你!
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);