gpt4 book ai didi

c# - 使用字符串生成器和大量参数构建 sql 查询

转载 作者:行者123 更新时间:2023-11-30 23:04:36 25 4
gpt4 key购买 nike

我正在使用循环构建我的查询

for (var i = 0; i <  query.BlackWhiteListFieldMatchProxy.Count; i++)
{
sb.Append($@"(
MatchType = {(int)query.BlackWhiteListFieldMatchProxy[i].MatchType}
AND EntityType = {(int)query.BlackWhiteListFieldMatchProxy[i].EntityType}
AND MatchFieldType = {(int)query.BlackWhiteListFieldMatchProxy[i].MatchFieldType}
AND (
(
MatchValue = '{query.BlackWhiteListFieldMatchProxy[i].MatchValue1}'
OR MatchValue = {query.BlackWhiteListFieldMatchProxy[i].MatchValue2Or ?? "Null"}
)
AND
(
{query.BlackWhiteListFieldMatchProxy[i].MatchValue2And ?? "Null"} is Null
OR MatchValue2 is Null
OR MatchValue2 = {query.BlackWhiteListFieldMatchProxy[i].MatchValue2And ?? "Null"}
)
)
)");

if (i != query.BlackWhiteListFieldMatchProxy.Count - 1)
sb.Append($@"
OR");
}

但是我有这个问题

{query.BlackWhiteListFieldMatchProxy[i].MatchValue2And ?? "Null"} is Null

如果为Null就可以,否则真正的值就是没有""

问题是我不能使用类似的东西

@MatchValue

因为我有一个具有相同名称的参数列表,只是列表中的编号不同,所以名称将相同并且无法正确映射

最佳答案

for (var i = 0; i <  query.BlackWhiteListFieldMatchProxy.Count; i++)
{
var match = query.BlackWhiteListFieldMatchProxy[i];
cmd.Parameters.AddWithValue($"@matchType{i}", (int)match.MatchType);
cmd.Parameters.AddWithValue($"@entityType{i}", (int)match.EntityType);
cmd.Parameters.AddWithValue($"@fieldType{i}", (int)match.MatchFieldType);

sb.Append($@"(
MatchType = @matchType{i}
AND EntityType = @entityType{i}
AND MatchFieldType = @fieldType{i}
... etc

为每个必需的元素添加额外的参数 - 这样就会有 @matchType0@matchType1 等 - 然后你就没有注入(inject)漏洞了。需要注意的一件事:valuenull 的参数 不会发送,因此检查 null 并生成不同的 SQL,或者确保在这种情况下将参数值设置为 DBNull.Value

关于c# - 使用字符串生成器和大量参数构建 sql 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49316667/

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