Sql server 参数SqlDbType所在的存储过程

Sql server 参数SqlDbType所在的存储过程,sql-server,vb.net,Sql Server,Vb.net,我有一个组合框和一个文本框。 我对@criteria使用组合框值,对@value使用texbox值 但当我执行此操作时,没有显示任何数据。 我已经分析了以下问题: select * from Table where @criteria like '%'+@value+'%' 根据我的测试,如果我的值是@criteria字符串的一部分,数据就会显示出来。因此,如果@criteria是'Name',那么数据只在@value是'n'或'a'或'm'或'e'时显示 我怎样才能让它工作 Open

我有一个组合框和一个文本框。 我对@criteria使用组合框值,对@value使用texbox值 但当我执行此操作时,没有显示任何数据。 我已经分析了以下问题:

    select * from Table where @criteria like '%'+@value+'%'
根据我的测试,如果我的值是@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()

我想您可能希望“@criteria”将成为您的数据库字段名。ADO.NET中的参数(以及几乎所有现代数据库访问方法中的参数)指的是数据值,不能用作数据库字段名。

使用
CmbCriteria。选择editem.Text
CmbCriteria。根据需要选择editem.Value
。这也是打字错误吗?因为您有
SqlDbType.Varchar
作为值参数,而不是标准。@Nilesh我在那里稍微更改了代码,不知道为什么看起来像是打字错误,但我向您保证不是这样。关于“cmbkriteria.selecteditem.text”或“cmbcriteria.selecteditem.value”,它返回“未找到字符串”类型上的“公共成员”文本“/“值”。请确保在模块开头有
选项Explicit
。这是正确的,尽管它对我的问题没有帮助。事实表明我的代码是错误的。我会找到解决办法的。小心避免sql注入攻击。您可以尝试使用case语句列出所有可能的搜索字段,如下所示:从表中选择*,其中case when@criteria='FIELDNAME',然后是FIELDNAME,如“%”+@value+'%'end,但希望您能找到更流畅的内容。