Sql server 参数SqlDbType所在的存储过程
我有一个组合框和一个文本框。 我对@criteria使用组合框值,对@value使用texbox值 但当我执行此操作时,没有显示任何数据。 我已经分析了以下问题: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
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,但希望您能找到更流畅的内容。