gpt4 book ai didi

c# - 我如何在 C# 中将字符串列表作为 SQL 参数传递

转载 作者:行者123 更新时间:2023-11-30 17:25:13 24 4
gpt4 key购买 nike

我正在使用 Entity Framework 。有人告诉我执行直接 sql 的建议方法是使用参数而不是直接将值插入查询字符串。我尝试制作 invidual sql 参数并意识到有 2100 个参数限制(我在列表中有 8000 个字符串参数)...我可以通过将值直接传递给 mySQLQuery 字符串来让它工作,但我想知道如何将其作为参数传递以避免 sql 注入(inject)攻击?我尝试了下面的代码

var mySQLQueryString = "...WHERE DataID IN (@mySQLVariable)";
List<string> dataList = new List<string>();
SqlParameter param = new SqlParameter("@mySQLVariable", string.Join(",", dataList.ToArray()));
return context.Database.SqlQuery<ConcretePOCO>(mySQLQueryString, param).ToList();

通过探查器查看时,发送到 SQL 的数据是“1,2,3,4”...我需要它是“1”、“2”、“3”、“4” '....

作为参数发送时如何完成此操作?

最佳答案

如何在 EF 中使用表值参数:

在 SQL 中创建一个新的类型

CREATE TYPE DataIds AS TABLE  
(
DataID int
)

在您的方法中,从您的列表创建一个新的DataTable

using System.Ling;
using System.Data;
// ...

var dataIds = new DataTable();
dataIds.Columns.Add("DataID", typeof(int));

List<string> dataList = new List<string>();
// do what ever to fill your list with parameters

foreach (String item in dataList)
{
DataRow row = dataIds.NewRow();
row["DataID"] = item;
table.Rows.Add(row);
}

// When fetching data
var mySQLQueryString = "...WHERE DataID IN (SELECT DataID FROM @mySQLVariable)";
SqlParameter param = new SqlParameter("@mySQLVariable", SqlDbType.Structured);
param.Value = dataIds;
param.TypeName = "dbo.DataIds";
return context.Database.SqlQuery<ConcretePOCO>(mySQLQueryString, param).ToList();

关于c# - 我如何在 C# 中将字符串列表作为 SQL 参数传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59035173/

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