1

全部,

我有一个视图,其中一些过滤数据将由 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但作为字符串传递,因此它会给出错误,而对于字符串值,它会给出无效的列名。

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

4

3 回答 3

1

'%' + {0} + '%'是错的。

如果search = "abc" 这会产生:"Name like '%'+abc+'%'"这显然是无效的sql

如果您'%{0}%'改用,您将拥有有效的 sql(如果没有'in search

用这个:

string searchQuery = string.Format("select BridgeId,Name,OwnerId from vConferenceBridgesDetails where BridgeId like '%{0}%' OR Name like '%{0}%' OR DisplayName like '%{0}%'", search);
于 2013-08-13T08:55:50.217 回答
0

首先,BridgeId 是一个 int 并且不能在 int 上实现,因此要么将其更改为 varchar 要么使用 =

其次,无论您在哪里使用 like 语句,都必须用单引号传递它,例如

string searchQuery = string.Format("select BridgeId,Name,OwnerId from vConferenceBridgesDetails where BridgeId  =  {0}  OR Name like '% + {0} + %' OR DisplayName like '% + {0} + %'", search);
于 2013-08-13T08:55:12.137 回答
0

使用'%YourValue%' 代替'%' + YourValue + '%'附加'+符号会导致问题。

于 2013-08-13T09:02:46.397 回答