gpt4 book ai didi

c# - 如何在 EF Core 中使用动态数量的参数构造原始 SQL 查询

转载 作者:太空宇宙 更新时间:2023-11-03 12:07:50 24 4
gpt4 key购买 nike

我正在尝试动态构建一个包含 X 条条件的原始 SQL 查询。我正在根据此页面上的信息工作:https://learn.microsoft.com/en-us/ef/core/querying/raw-sql

目前我有类似的东西:

String rawQuery = "SELECT * FROM ItemsTable WHERE ";

foreach (f in FilterList) {
rawQuery = rawQuery + String.Format(f.condition, f.userInput);
// f.condition is something like "Name LIKE {0}"
}

var filteredItems = context.ItemsTable
.FromSql(rawQuery)
.ToList();

问题是,我的参数在使用 .FromSql() 时没有被替换,所以我很容易受到 SQL 注入(inject)攻击。

有没有办法使用 .FromSql() 来完成这项任务?

或者,还有其他方法可以防止 SQL 注入(inject)吗?

最佳答案

您可以使查询参数化,构建一个 SqlParameters 列表,然后将查询和参数传递给 FromSql():

var rawQuery = new StringBuilder("SELECT * FROM ItemsTable WHERE ");
var sqlParameters = new List<SqlParameter>();

foreach (var f in FilterList) {
var parameterName = $"@p{FilterList.IndexOf(f)}";
var parameterizedCondition = string.Format(f.condition, parameterName);
// f.condition is something like "Name LIKE {0}"

rawQuery.Append(parameterizedCondition);
sqlParameters.Add(new SqlParameter(parameterName, f.userInput));
}

var filteredItems = context.ItemsTable
.FromSql(rawQuery.ToString(), sqlParameters)
.ToList();

关于c# - 如何在 EF Core 中使用动态数量的参数构造原始 SQL 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54015590/

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