首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >sqlParameter转换

sqlParameter转换
EN

Stack Overflow用户
提问于 2008-10-08 11:10:25
回答 4查看 803关注 0票数 1

我试图调用下面的SQL语句,但得到以下错误:

System.Data.SqlClient.SqlException:当将varchar值'+@buildingIDs+‘转换为数据类型int时,转换失败。

代码语言:javascript
复制
@"SELECT id, startDateTime, endDateTime 
    FROM tb_bookings 
   WHERE buildingID IN ('+@buildingIDs+') 
     AND startDateTime <= @fromDate";

buildingID是db中的int类型列。我需要将ID作为ints数组传递吗?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2008-10-08 11:37:23

布拉瓦克斯的方式有点危险。为了避免受到SQL注入的攻击,我将使用以下方法:

代码语言:javascript
复制
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"; 
票数 2
EN

Stack Overflow用户

发布于 2008-10-08 11:42:58

请注意,LINQ可以通过包含(映射到IN)来完成这一任务。对于常规的TSQL,另一个选项是将列表作为CSV (etc) varchar传递,并使用表值UDF将varchar拆分为几个部分。这允许您使用单个TSQL查询(对UDF结果执行内部连接)。

票数 1
EN

Stack Overflow用户

发布于 2008-10-08 11:41:06

如果可能的话,我建议使用一个存储过程,并将ID列表作为xml传递。您可以从这里获得有关此方法的更多细节。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/182181

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档