在Sql中选择具有多个相似条件的查询
本文关键字:相似 条件 查询 Sql 选择 | 更新日期: 2023-09-27 18:27:31
全部,
我有一个视图,sql查询将从中提取一些过滤后的数据
视图结构:
BridgeId int
Name varchar
DisplayName varchar
有一个搜索文本框,用户可以在其中输入任何一个值进行筛选。
由于项目的旧框架,我不得不从c#本身进行查询。
public static List<ConferenceBridges> GetSearchList(string search)
{
DB db = new DB(SERVER_NAME, DATA_BASE_NAME);
string searchQuery = string.Format("select BridgeId,Name,OwnerId from vConferenceBridgesDetails where BridgeId like '%' + {0} + '%' OR Name like'%' + {0} + '%' OR DisplayName like '%' + {0} + '%'", search);
DataTable table = db.GetData(searchQuery);
List<ConferenceBridges> bridgeList = new List<ConferenceBridges>();
if (table != null && table.Rows.Count > 0)
{
foreach (DataRow item in table.Rows)
{
bridgeList.Add(new ConferenceBridges(item));
}
}
return bridgeList;
}
问题:当我输入桥id时,它是int,但作为字符串传递,所以它给出错误,对于字符串值,它给出无效的列名。
如何进行查询,使其接受所有参数。
'%' + {0} + '%'
就是错误的。
如果search = "abc"
这将生成:"Name like '%'+abc+'%'"
,这显然是无效的sql
如果使用'%{0}%'
,则将具有有效的sql(如果search
中没有'
)
使用这个:
string searchQuery = string.Format("select BridgeId,Name,OwnerId from vConferenceBridgesDetails where BridgeId like '%{0}%' OR Name like '%{0}%' OR DisplayName like '%{0}%'", search);
首先,BridgeId是一个int,不能在int上实现,所以要么将其更改为varchar,要么使用=
其次,无论您在哪里使用类似的语句,都必须使用等单引号进行传递
string searchQuery = string.Format("select BridgeId,Name,OwnerId from vConferenceBridgesDetails where BridgeId = {0} OR Name like '% + {0} + %' OR DisplayName like '% + {0} + %'", search);
使用'%YourValue%
'代替'%' + YourValue + '%'
替代'
和+
符号导致问题。