2013-07-18 46 views
0

大家下午好,用戶應該可以通過日期和文本進行搜索,我怎樣才能在一個文本框中進行搜索?如何按日期時間或文本過濾表達式?

enter image description here

protected void BtnWinnersSearch_Click(object sender, EventArgs e) 
{ 
    string searchText = txtWinnersSearch.Text.Replace("'", "''").Trim(); 
    GridViewWinners.Visible = true; 

    SqlDataSource4.FilterExpression = "nickname like '%" + searchText + "%' or username like '%" + searchText + 
     "%' or clubnumber like '%" + searchText + "%' or firstname like '%" + 
     searchText + "%' or lastname like '%" + searchText + 
     "%' or email like '%" + searchText + "%' or dob like '%" + Convert.ToDateTime(searchText).ToString("yyyy-MM-dd") + "%'"; 
} 

拋出以下錯誤:

enter image description here

enter image description here

作品!

+0

是dob的日期時間列嗎? –

回答

0

沒關係,我知道了。答案如下:

public static bool IsDate(Object obj) 
    { 
     string strDate = obj.ToString(); 
     try 
     { 
      DateTime dt = DateTime.Parse(strDate); 
      if (dt != DateTime.MinValue && dt != DateTime.MaxValue) 
       return true; 
      return false; 
     } 
     catch 
     { 
      return false; 
     } 
    } 

protected void BtnWinnersSearch_Click(object sender, EventArgs e) 
    { 

     string searchText = txtWinnersSearch.Text.Replace("'", "''").Trim(); 
     bool isDate = IsDate(searchText); 

     GridViewWinners.Visible = true; 

     if (isDate == true) 
     { 
      SqlDataSource4.FilterExpression = "dob" + " ='" + Convert.ToDateTime(searchText).ToString("yyyy-MM-dd") + "'"; 
     } 
     else 
     { 
      SqlDataSource4.FilterExpression = "nickname like '%" + searchText + "%' or username like '%" + searchText + 
       "%' or clubnumber like '%" + searchText + "%' or firstname like '%" + 
       searchText + "%' or lastname like '%" + searchText + 
       "%' or email like '%" + searchText + "%'"; 
     } 
    } 
0

你永遠不應該 - 永遠不要寫這樣的SQL代碼!你的代碼非常容易受到SQL注入攻擊。

如果searchText是「'; truncate table; - 」那麼你死在水中。

通過正則表達式驗證也沒有實用的方法來保護自己。任何你能想到的正則表達式都可以通過任意數量的向量來解決。

嚴重的是,這個SQL代碼需要被刪除,並替換爲使用正確的參數綁定的代碼。你擁有的東西不能用於任何類似於生產環境的東西。