选择关键字要求>而不是=

时间:2013-06-22 15:49:34

标签: asp.net datarow

如果我使用=而不是>在下面排队   TextBox1.Text =“regdate> '12 / 12/2012 8:27:09'”;

它返回零行。有什么原因吗?

        DataView dv1 = new DataView ();
        DataSet ds = new DataSet ();
        DataTable dt = new DataTable();

        /*
         col1   col2            col3    col4            col5
         1      sw@yahoo.com    sw      Stephen Walther 12/12/2012 8:27:09 PM
         2      as@yahoo.com    as      Al Stevens      12/12/2012 8:27:09 PM
        */

//这是根据日期时间选择几行的代码和标准。

        TextBox1.Text = "regdate > '12/12/2012'";

        //connection created 

        SqlConnection con = new SqlConnection(SqlDataSource1.ConnectionString);
        con.Open();
        SqlDataAdapter da = new SqlDataAdapter ("SELECT * FROM users",con);
        da.Fill (ds);

        // filtering criteria applied .
        DataRow[] dr = ds.Tables["Table"].Select(TextBox1.Text);

         //columns created
        dt.Columns.Add("col1", typeof(int));
        dt.Columns.Add("col2", typeof(string));
        dt.Columns.Add("col3", typeof(string));
        dt.Columns.Add("col4", typeof(string));
        dt.Columns.Add("col5", typeof(DateTime));

         // data added
        foreach (DataRow item in dr)
        {
            dt.Rows.Add(item.ItemArray);
        }

        // view created
        dv1 = dt.DefaultView ;
        GridView1.DataSourceID = string.Empty; 
        GridView1.DataSource = dv1 ;
        Page.DataBind(); 

3 个答案:

答案 0 :(得分:1)

因为时间组件正在停止匹配 - 它正在尝试匹配日期和时间。

您可以尝试使用某种DATEDIFF函数来匹配日期部分

How to test two datetimes for equality in T-SQL (ignoring their time components)?

但是 - 修改代码时要非常小心 - 不要开始将文本框输入到SQL语句中。注射攻击风险很大。

我认为你很好,但是......

答案 1 :(得分:1)

因为它是一个日期时间字段,所以它将比较整个日期和时间值,而不仅仅是日期。

12/12/2012 8:27:09 PM12/12/2012不相同,因为12/12/2012会扩展为12/12/2012 12:00:00 AM值,以与日期时间值相比较。日期时间值不会被截断以与日期值相比。

通常,当数据类型与比较或计算不匹配时,较小的类型会扩展为较大的类型,因此不会无意中丢失数据。

答案 2 :(得分:0)

数据库以(大约)毫秒分辨率存储日期。当显示“12/12/2012 8:27:09 PM”时,可能存在未显示的毫秒部分,但会与未指定那些毫秒的日期进行比较。

“>”比较将成功,因为存储的日期 高于您指定的日期,正是因为这些毫秒。