2009-09-18 248 views
0

我有一個Gridview,我想過濾。我的gridview是在更新面板中,我的過濾器按鈕不是。在按鈕點擊我有以下內容追加到選擇命令

protected void bttnfilter_Click(object sender, ImageClickEventArgs e) 
{ 
    if (TextBox1.Text != "") 
    { 
     SqlDataSource1.SelectCommand += " and field like '%' + @param + '%'"; 
     SqlConnection conn = new SqlConnection(SqlDataSource1.ConnectionString); 
     SqlCommand cmd = new SqlCommand(SqlDataSource1.SelectCommand, conn); 
     cmd.Parameters.Add(new SqlParameter("@param", TextBox1.Text)); 
    } 

} 

因此,我添加到選擇命令,但我得到一個錯誤。我應該怎麼做呢?我不想使用動態SQL。

的錯誤讀取 附近有語法錯誤「和」

+0

「我得到一個錯誤」你得到了什麼錯誤? – Welbog 2009-09-18 16:14:31

+0

錯誤的語法靠近'和' – Eric 2009-09-18 16:16:47

+0

什麼是最初的'SelectCommand'的值? – Welbog 2009-09-18 16:17:51

回答

1

像這樣的事情應該去做

private void bttnfilter_Click(object sender, ImageClickEventArgs e) 
{ 
    string filterText = TextBox1.Text.Trim().ToLower(); 

    if (!String.IsNullOrEmpty(filterText)) 
     SqlDataSource1.FilterExpression = 
      string.Format("field LIKE '%{0}%'",filterText);   
} 
+0

這是說它無法找到我的列字段 – Eric 2009-09-18 16:25:47

+0

@Eric - 這是假定字段是數據庫*表*中字段的名稱。您需要將名稱更改爲有問題字段的名稱 – 2009-09-18 16:27:51

+0

Russ謝謝。我把它當作v.field。我將它改爲Field。它就像你說的那樣工作。 +1也。謝謝 – Eric 2009-09-18 16:29:24

3

最有可能你是附加到查詢,而WHERE子句:

SELECT * 
FROM mytable 
     AND field LIKE '%test%' 

會給你這個錯誤。

讓你查詢存根如下:

SELECT * 
FROM mytable 
WHERE 1 = 1 

,除非你附加其他條件,這將選擇一切。

在你的情況,這將給:

SELECT * 
FROM mytable 
WHERE 1 = 1 
     AND field LIKE '%test%' 

,這是一個有效的查詢。

I don't want to use dynamic sql.

使用它。

你最好重寫查詢,因爲這:

SELECT * 
FROM mytable 
WHERE @param IS NULL 
UNION ALL 
SELECT * 
FROM mytable 
WHERE field LIKE '%' + @param + '%' 

,並綁定NULL如果文本字段爲空。

+0

+1最有可能 – 2009-09-18 16:20:52

0

可能是缺少where子句或SelectCommand引用存儲過程。

2

您確定SQL語句中的最後一個子句是WHERE子句嗎?如果沒有WHERE子句或者在WHERE(GROUP BY,ORDER BY)之後有另一個子句,那麼你會得到這個錯誤。

+0

你說得對。這是一個訂單。但我改變了它,它說它找不到標量變量@param。 – Eric 2009-09-18 16:26:51