我想通过字符串的链接实现,在where
后面定义一个完整的SQL语句条件,因为我不确定where
后面有多少条件。
for (int i = 0; i < listView2.Items.Count; i++)
{
if (!is_first)
{
para += "maccount" +" "+ "=" + listView2.Items[i].Text;
is_first = true;
}
else
{
para += " or " + "maccount"+"="+ listView2.Items[i].Text;
}
}
MessageBox.Show(para);
string sql3 = "select maccount,msum from pharmaceutical_stocks where @para";
SqlParameter[] parameters3 = new SqlParameter[]
{
new SqlParameter("@para",para)
};
DataTable dt = sqlcontent.dt(sql3, parameters3);
我想通过保存在listview 2中的每个项目中的信息来查找数据库中的数据。
但我得到这个例外:
System.Data.SqlClient.SqlException:在应使用条件的上下文中指定了非布尔类型的表达式(在“@ para”附近)。
2条答案
按热度按时间bmp9r5qi1#
上面的代码无法工作!
参数不能用于替换查询中的文本块,无论文本是列名、表名、运算符还是上述元素的某种组合。
它们只能用于将值传输到数据库引擎,在数据库引擎中,它们可以与查询文本和查询中的占位符一起正确使用,而无需进行文本替换操作。您应该使用IN子句并构建一个参数数组。单参数占位符可以通过代码在内部连接字符串来构造,而无需担心SQL注入。
最后,在查询文本中插入参数占位符(而不是值),并将包含所有已定义参数的列表传递给方法
dhxwm5r42#
我的代码背后的想法与Steve的答案相同,但我建议使用string.Join来构建params字符串。假设parameters是SqlParameter[]
这样你就不用担心逗号了,你唯一要检查的是listView2中是否真的有一些条目