所有
我有一个视图,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 :(得分: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 + '%'
其他'
,而+
符号会导致此问题。