2013-08-26 28 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