2013-08-26 32 views
0

我有一個組合框和一個文本框。 @value 我使用@criteria和texbox值的組合框值,但是當我執行此操作時沒有顯示數據。 我已經在分析問題中:存儲過程其中參數SqlDbType

select * from Table where @criteria like '%'[email protected]+'%' 

從我測試,數據顯示了,如果我的價值是@criteria字符串的一部分。因此,如果@criteria是'Name',那麼只有@value是'n'或'a'或'm'或'e'時纔會顯示數據。我如何才能使其工作?

OpenConn() 
    Cmd.CommandType = CommandType.StoredProcedure 
    Cmd.CommandText = "Find" 
    Cmd.Parameters.Clear() 
    Cmd.Parameters.Add("@Criteria", SqlDbType.varchar).Value = CmbCriteria.Text 
    Cmd.Parameters.Add("@Value", SqlDbType.VarChar).Value = TxtValue.Text 
    Dr = Cmd.ExecuteReader 
    ListView1.Items.Clear() 
    Do While Dr.Read 
     Dim lv As ListViewItem 
     lv = ListView1.Items.Add(Dr("No")) 
     lv.SubItems.Add(Dr("Name")) 
     lv.SubItems.Add(Dr("Address")) 
    Loop 
CloseConn() 
+0

根據您的需要使用'CmbCriteria.SelectedItem.Text'或'CmbCriteria.SelectedItem.Value'。還有'SqlDbType.varchar'是一個錯字?因爲你有'SqlDbType.Varchar'作爲Value參數,而不是Criteria。 – Nilesh

+0

@Nilesh我在那裏稍微改變一下代碼,不知道爲什麼它看起來像一個錯字,但我向你保證,情況並非如此。關於'cmbkriteria.selecteditem.text'或'cmbcriteria.selecteditem.value',它會返回類型'String'中未找到的'Public member'文本'/'值'。 – Hendry

+0

確保你在模塊的開頭有'Option Explicit'。 – RBarryYoung

回答

1

我想也許你期待「@criteria」將是你的數據庫字段名稱。 ADO.NET中的參數(以及幾乎所有現代數據庫訪問方法)都是指數據值,不能用作數據庫字段名稱。

+0

這是對的,雖然它沒有幫助我的問題。事實表明我的代碼是錯誤的。我會找到一個方法。 – Hendry

+0

小心避免sql注入攻擊。您可以嘗試列出所有可能的搜索字段,如下所示:select * from Table其中, @criteria ='FIELDNAME'的情況下,然後FIELDNAME如'%'+ @ value +'%'結束,但希望您找到更平滑的東西。 – Grax