我在ASP.NET中构建了一个Web服务,它向我发送一个房间列表。
参数是由逗号分隔的ID。
我将它们保存为字符串并构建了一个sql选择查询。
当我发送所有4个参数时,我一切正常,我得到一个结果。但当我发送少于4个参数时,我得到一个错误。
System.Data.SqlClient.SqlException: Incorrect syntax near ')'.
如何在sql查询中设置可选参数,以便只选择输入的值?
下面是我目前的代码:
internal static List<RAUM> Raum(string RAUMKLASSE_ID, string STADT_ID, string GEBAEUDE_ID, string REGION_ID)
{
List<RAUM> strasseObject = new List<RAUM>();
string raumklasseid = RAUMKLASSE_ID;
string gebaudeid = GEBAEUDE_ID;
string stadtid = STADT_ID;
string regionid = REGION_ID;
using (SqlConnection con = new SqlConnection(@"Data Source=Localhost\SQLEXPRESS;Initial Catalog=BOOK-IT-V2;Integrated Security=true;"))
using (SqlCommand cmd = new SqlCommand(@"SELECT r.BEZEICHNUNG AS BEZEICHNUNG, r.ID AS ID FROM RAUM r WHERE RAUMKLASSE_ID IN (" + raumklasseid + ") AND STADT_ID IN (" + stadtid + ") AND GEBAEUDE_ID IN (" + gebaudeid + ") AND REGION_ID IN (" + regionid + ")", con))
{
con.Open();
using (SqlDataReader rdr = cmd.ExecuteReader())
{
while (rdr.Read())
{
if (rdr["BEZEICHNUNG"] != DBNull.Value && rdr["ID"] != DBNull.Value)
{
strasseObject.Add(new RAUM()
{
RaumName = rdr["BEZEICHNUNG"].ToString(),
RaumID = rdr["ID"].ToString()
});
}
}
}
}
return strasseObject;
}
提前感谢您的帮助。
2条答案
按热度按时间yftpprvb1#
假设参数
REGION_ID
是一个空字符串,那么查询的这一部分将类似于:因为在
AND REGION_ID IN (" + regionid + ")"
中,regionid
变量将被替换为空字符串。这不是有效的SQL语法,因此您将获得该异常。声明如下函数:
然后更改您的代码,以如下方式生成查询:
警告:不要在生产环境中使用这段代码,也不要在用户输入时使用这段代码,因为这段代码容易受到SQL注入的攻击。
ekqde3dh2#
编写存储过程并传递参数总是一种更好的方法。但是在你的方法中,你应该拆分你的查询,因为不确定值。所以,你的代码应该是这样的。
你自己测试一下,我没检查