作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
如何将以逗号分隔的整数数组传递给实体中的 ExecuteStoreCommand
作为参数我无法执行此操作:
this.ObjectContext.ExecuteStoreCommand("INSERT INTO SurveyPatientListMrns
(UserData, MrnId) SELECT DISTINCT '{0}' , MrnId
FROM PatientVisits WHERE (FacilityId = {1})
AND (UnitId IN ({2}))", userData, facilityId, (string.Join(",", unitIds)));
此处 (string.Join(",", unitIds))
是一个字符串,由于逗号,我无法将其转换为整数。那我怎么传递参数呢?
仅供引用,unitIds 是一个整数数组
最佳答案
虽然它看起来像一个 string.Format
操作,但 ExecuteStoreCommand
正在内部构建一个参数化查询以提高性能并帮助保护您免受 SQL 注入(inject)攻击。 (MSDN)
当您将 string.Join
作为 ExecuteStoreCommand
的参数执行时,它不会将该结果视为 IN
的值列表子句,而是一个恰好看起来像一个的字符串。基本上它会生成一个 IN
子句,如下所示:
(UnitId IN ('1,2,3'))
这显然不是你想要的。
在传递 ExecuteStoreCommand
之前,您必须使用 string.Join
编辑的 uinitIds
列表构建 SQL 命令:
string query = @"INSERT INTO SurveyPatientListMrns (UserData, MrnId)
SELECT DISTINCT '{0}' , MrnId
FROM PatientVisits WHERE (FacilityId = {1}) AND
(UnitId IN (" + string.Join(",", unitIds) + "))";
this.ObjectContext.ExecuteStoreCommand(query, userData, facilityId);
通常应该避免动态构建 SQL 查询,因为存在 SQL 注入(inject)攻击的可能性,但在这种情况下,您知道 unitIds
是一个整数列表,因此您应该没问题。
关于c# - 如何将数组传递给执行存储命令?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13169566/
我是一名优秀的程序员,十分优秀!