这是我在vb.net中使用的查询
select *
from tbl_patientinfo
where fname like '%" & txtsearchquery.Text & "%'
or mname like '%" & txtsearchquery.Text & "%'
or lname like '%" & txtsearchquery.Text & "%'
我知道它很长,我想知道的是有没有办法缩短它。我尝试过IN,但它不允许多列,只有搜索变量。 LIKE也不顺利。我正在寻找一种方法让我的代码看起来像这样:
select *
from tbl_patientinfo
where (fname, mname, lname) like '%" txtsearchquery.text "&'
答案 0 :(得分:0)
尝试连接字段。 在MySQL中你可以这样做:
select *
from tbl_patientinfo
where concat(fname, mname, lname) like '%" & txtsearchquery.text & "%'
答案 1 :(得分:0)
您的查询不是有效的VB.NET LINQ。正如另一位成员所建议的,它可能是MySQL。如果是这种情况,请相应调整问号。
无论使用哪种查询语言,都有像这样的WHERE条件没有任何问题。只需确保使用参数,以避免SQL注入。你可以有一个for循环添加LIKE条件到列表。这就是我的意思:
Dim sql = "select * from tbl_patientinfo where "
Dim conditions As New List(Of String)
For Each fieldName As String In {"fname", "mname", "lname"}
conditions.Add(fieldName & " LIKE '%" & txtsearchquery.Text & "%'")
Next
sql &= String.Join(" OR ", conditions.ToArray())
这样可以保持代码干燥(避免重复),并且不依赖于供应商。
如果你决定使用参数,应该很容易修改上面的代码。