在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,但作为字符串传递,所以它给出错误,对于字符串值,它给出无效的列名。

如何进行查询,使其接受所有参数。

在Sql中选择具有多个相似条件的查询

'%' + {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 + '%'替代'+符号导致问题。