[英]Select keyword require > instead of =
如果我在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();
由於時間部分正在停止比賽-試圖匹配日期和時間。
您可以嘗試使用某種DATEDIFF函數來匹配日期部分
如何在T-SQL中測試兩個日期時間是否相等(忽略它們的時間成分)?
但是-修改代碼時要特別小心-不要開始將文本框輸入放到SQL語句中。 注射攻擊風險充沛。
我認為您現在還可以,但是....
因為它是一個datetime字段,所以它將比較整個日期和時間值,而不僅僅是日期。
值12/12/2012 8:27:09 PM
和12/12/2012
並不相同,因為12/12/2012
被擴展為12/12/2012 12:00:00 AM
值到datetime值。 datetime值不會被截斷以與日期值相當。
通常,當數據類型不適合進行比較或計算時,較小的類型將擴展為較大的類型,這樣就不會造成無意的數據丟失。
數據庫以(大約)毫秒的分辨率存儲日期。 當顯示“ 12/12/2012 8:27:09 PM”時,可能會顯示一個毫秒部分,但該日期與未指定這些毫秒的日期進行比較。
在“>”比較會成功,因為存儲的日期是因為那些毫秒的精確比您指定的日期較高。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.