2015-08-30 86 views
0

我想篩選gridview與一些checkboxlists的幫助,它的工作原理絕對fine.It是所有實時,因爲我使用更新panel.Now當我嘗試添加還有一個文件管理器,也就是兩個日期選擇器來根據兩個日期過濾gridview,它給了我錯誤消息「關鍵字附近的語法不正確」和「。」。整個代碼如下:不正確的語法附近的關鍵字'和'

 private void BindGrid() 
{ 
    string CS = ConfigurationManager.ConnectionStrings["SportsActiveConnectionString"].ConnectionString; 
    string query = "Select * from tblAllEvents"; 

    string condition = string.Empty; 
    string conditionDisability = string.Empty; 
    string conditionDates = string.Empty; 
    foreach (ListItem item in cblGender.Items) 
    { 
     condition += item.Selected ? string.Format("'{0}',", item.Value) : string.Empty; 
    } 

    if (!string.IsNullOrEmpty(condition)) 
    { 
     condition = string.Format(" Where Gender IN ({0})", condition.Substring(0, condition.Length - 1)); 
    } 
    else 
    { 
     condition = string.Format(" Where Gender IN ('Male','Female','Mixed')", condition.Substring(0,Math.Max(0,condition.Length - 1))); 
    } 
    foreach (ListItem item in cblDisability.Items) 
    { 
     conditionDisability += item.Selected ? string.Format("'{0}',", item.Value) : string.Empty; 
    } 
    if (!string.IsNullOrEmpty(conditionDisability)) 
    { 
     conditionDisability = string.Format(" and Disabled IN ({0})", conditionDisability.Substring(0, conditionDisability.Length - 1)); 
    } 
    if(txtEventStart.Text == null) 
    { 
     txtEventStart.Text = "01/01/1900"; 
    } 
    if(txtEventEnd.Text == null) 
    { 
     txtEventEnd.Text = "01/01/2050"; 
    } 

    conditionDates = string.Format(" and EventStart between {0} and {1}",txtEventStart.Text,txtEventEnd.Text); 

    using (SqlConnection con = new SqlConnection(CS)) 
    { 
     using (SqlCommand cmd = new SqlCommand(query + condition + conditionDisability + conditionDates)) 
     { 
      using (SqlDataAdapter sda = new SqlDataAdapter(cmd)) 
      { 
       cmd.Connection = con; 
       using (DataTable dt = new DataTable()) 
       { 
        sda.Fill(dt); 
        GridView1.DataSource = dt; 
        GridView1.DataBind(); 
       } 
      } 
     } 
    } 
} 

請注意問題出現時,當我在查詢中包含'conditionDates'。什麼可以是其他方式來使查詢工作。

編輯:正如我剛纔所說,問題出在下面的代碼

 if(txtEventStart.Text == null) 
    { 
     txtEventStart.Text = "01/01/1900"; 
    } 
    if(txtEventEnd.Text == null) 
    { 
     txtEventEnd.Text = "01/01/2050"; 
    } 

    conditionDates = string.Format(" and EventStart between {0} and {1}",txtEventStart.Text,txtEventEnd.Text); 
+0

這是太漫長而無關。顯示生成錯誤的結果字符串以及生成問題區域的特定行。更好的是,創建MCVE。 – Amit

+0

使它有點短並且清楚@Amit – RelatedRhymes

+1

你錯過了SQL中的日期值? –

回答

3

你缺少單引號周圍值:

conditionDates = string.Format(" and EventStart between '{0}' and '{1}'", txtEventStart.Text, txtEventEnd.Text); 

不過請注意像這樣的代碼是敞開的SQL injection攻擊。你應該在查詢,而不是使用參數:

conditionDates = " and EventStart between @EventStart and @EventEnd"; 

然後添加參數到命令對象的參數集合值提供給查詢:

cmd.Parameters.Add("@EventStart", SqlDbType.DateTime).Value = txtEventStart.Text; 
cmd.Parameters.Add("@EventEnd", SqlDbType.DateTime).Value = txtEventEnd.Text; 
+0

有趣的是,我曾嘗試過相同的步驟,但它沒有奏效。現在它正在工作。無論如何,謝謝你。 – RelatedRhymes

0

很顯然你有一個SQL語法錯誤。首先調試您的代碼並獲取生成的查詢,並在SQL Server中單獨運行它。您將以這種方式更好地檢查它。

這是關於如何在添加該部分時連接SQL查詢。

+0

我明白,我真的很好奇我應該如何連接那部分。我嘗試過使用參數化查詢,但我不工作 – RelatedRhymes

+0

首先,您應該提供返回錯誤的SQL。那麼解決它就更加明顯了。嘗試@ Guffa的解決方案,因爲它更具體。 –

相關問題