1

如果我在 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
        */

// 这里是根据 datetime 选择几行的代码和条件。

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

3 回答 3

1

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

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

通常,当数据类型不匹配时,比较或计算,较小的类型会扩展为较大的类型,这样就不会意外丢失数据。

于 2013-06-22T16:03:24.820 回答
1

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

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

如何在 T-SQL 中测试两个日期时间是否相等(忽略它们的时间分量)?

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

我认为你现在还可以,但是......

于 2013-06-22T15:56:46.677 回答
0

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

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

于 2013-06-22T17:15:27.363 回答