我如何将数组传递给执行存储命令?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了我如何将数组传递给执行存储命令?相关的知识,希望对你有一定的参考价值。
如何将以逗号分隔的整数数组传递给实体中的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))
是一个字符串,由于逗号的原因,我无法将其转换为整数。那我该如何传递参数?
FYI,unitIds是整数数组
答案
尽管看起来像string.Format
操作,ExecuteStoreCommand
在内部构建参数化查询以提高性能并帮助保护您免受SQL注入攻击。 (MSDN)
当将string.Join
用作ExecuteStoreCommand
的参数时,它不会将该结果视为IN
子句的值列表,而是将一个字符串恰好看起来像一个字符串。基本上它将生成一个如下所示的IN
子句:
(UnitId IN ('1,2,3'))
显然不是您想要的。
在传递string.Join
之前,您将必须使用uinitIds
的ExecuteStoreCommand
版本的列表来构建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查询,但是在这种情况下,您知道
unitIds
是整数列表,因此应该可以。
另一答案
与答案相同,只是使用强类型结果集进行演示。
以上是关于我如何将数组传递给执行存储命令?的主要内容,如果未能解决你的问题,请参考以下文章