gpt4 book ai didi

c# - 如何将数组传递给执行存储命令?

转载 作者:行者123 更新时间:2023-12-02 05:25:22 25 4
gpt4 key购买 nike

如何将以逗号分隔的整数数组传递给实体中的 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com