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

时间:2013-08-13 08:50:39

标签: c# .net sql-server

所有

我有一个视图,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但是作为字符串传递,因此它给出了错误,对于字符串值,它给出了无效的列名。

如何进行查询以便接受所有参数。

3 个答案:

答案 0 :(得分:1)

'%' + {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);

答案 1 :(得分:0)

首先,BridgeId是一个int,类似无法在int上实现,所以将其更改为varchar或use =

其次,无论您使用的是什么声明,都必须使用单引号传递

string searchQuery = string.Format("select BridgeId,Name,OwnerId from vConferenceBridgesDetails where BridgeId  =  {0}  OR Name like '% + {0} + %' OR DisplayName like '% + {0} + %'", search);

答案 2 :(得分:0)

使用'%YourValue%代替'%' + YourValue + '%'其他',而+符号会导致此问题。