我试图调用下面的SQL语句,但得到以下错误:
System.Data.SqlClient.SqlException:当将varchar值'+@buildingIDs+‘转换为数据类型int时,转换失败。
@"SELECT id, startDateTime, endDateTime
FROM tb_bookings
WHERE buildingID IN ('+@buildingIDs+')
AND startDateTime <= @fromDate";buildingID是db中的int类型列。我需要将ID作为ints数组传递吗?
发布于 2008-10-08 11:37:23
布拉瓦克斯的方式有点危险。为了避免受到SQL注入的攻击,我将使用以下方法:
int[] buildingIDs = new int[] { 1, 2, 3 };
/***/ @"SELECT id, startDateTime, endDateTime From tb_bookings WHERE buildingID IN (" +
string.Join(", ", buildingIDs.Select(id => id.ToString()).ToArray())
+ ") AND startDateTime <= @fromDate"; 发布于 2008-10-08 11:42:58
请注意,LINQ可以通过包含(映射到IN)来完成这一任务。对于常规的TSQL,另一个选项是将列表作为CSV (etc) varchar传递,并使用表值UDF将varchar拆分为几个部分。这允许您使用单个TSQL查询(对UDF结果执行内部连接)。
发布于 2008-10-08 11:41:06
如果可能的话,我建议使用一个存储过程,并将ID列表作为xml传递。您可以从这里获得有关此方法的更多细节。
https://stackoverflow.com/questions/182181
复制相似问题