如果我使用=而不是>在下面排队 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();
答案 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 PM
和12/12/2012
不相同,因为12/12/2012
会扩展为12/12/2012 12:00:00 AM
值,以与日期时间值相比较。日期时间值不会被截断以与日期值相比。
通常,当数据类型与比较或计算不匹配时,较小的类型会扩展为较大的类型,因此不会无意中丢失数据。
答案 2 :(得分:0)
数据库以(大约)毫秒分辨率存储日期。当显示“12/12/2012 8:27:09 PM”时,可能存在未显示的毫秒部分,但会与未指定那些毫秒的日期进行比较。
“>”比较将成功,因为存储的日期 高于您指定的日期,正是因为这些毫秒。