gpt4 book ai didi

c# - 如何使用构造查询避免 CA2100

转载 作者:太空狗 更新时间:2023-10-29 23:07:37 25 4
gpt4 key购买 nike

在我的代码中的许多地方,我正在使用 StringBuilder 构建 SQL 语句,并且在每种情况下这都会触发来自代码分析的 CA2100: Review SQL queries for security vulnerabies,因为 SQLCommand 内容来自来自 StringBuilder 而不是文字。

通常这些查询是通过一些流程控制(case 或 if)组装的,其中查询的各个部分可能是有条件的。

我的问题是,我应该抑制其中的每一个,还是有不同的模式来构建(有时是复杂的)内联查询,但避免警告?

触发此操作的代码示例:

System.Text.StringBuilder sb = new System.Text.StringBuilder();

sb.AppendLine("select ");
sb.AppendLine(" Q.QUOTE_TITLE as [@Description] ");
sb.AppendLine("from ");
sb.AppendLine(" QUOTE Q ");
sb.AppendLine("where ");
sb.AppendLine(" Q.QUOTE_ID = @QUOTE_ID ");
sb.AppendLine(" and Q.QUOTE_VERS = @QUOTE_VERS ");
sb.AppendLine("for xml path('Contract') ");

SqlCommand sqlCmd = new SqlCommand(sb.ToString(), MainDBConnection);
sqlCmd.Parameters.Add("@QUOTE_ID", SqlDbType.Int).Value = QuoteID;
sqlCmd.Parameters.Add("@QUOTE_VERS", SqlDbType.SmallInt).Value = QuoteVersion;

最佳答案

为什么要使用 StringBuilder?您可以使用也更具可读性的字符串文字:

string sql = @"select Q.QUOTE_TITLE as [@Description]
from QUOTE Q
where Q.QUOTE_ID = @QUOTE_ID
and Q.QUOTE_VERS = @QUOTE_VERS
for xml path('Contract')";
SqlCommand sqlCmd = new SqlCommand(sql, MainDBConnection);
sqlCmd.Parameters.Add("@QUOTE_ID", SqlDbType.Int).Value = QuoteID;
sqlCmd.Parameters.Add("@QUOTE_VERS", SqlDbType.SmallInt).Value = QuoteVersion;

关于c# - 如何使用构造查询避免 CA2100,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22664196/

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