String.Format and SqlParameters

本文关键字:SqlParameters and Format String | 更新日期: 2023-09-27 18:37:25

我一直在浏览有关 .Net 中字符串格式的文档,但还没有找到这一点,希望有人能为我指出正确的方向。 我遇到了一段工作代码,它采用 SqlParameters 并将它们放在如下所示的字符串中:

        SqlParameter[] arrParams = new SqlParameter[]
        {
            new SqlParameter("@ClientID", clid),
            new SqlParameter("@CustomerID", cuid),
            new SqlParameter("@AdminUser", false)
        };
        string sqlText = string.Format("Insert into [Table1] (RID, CustomerID, AdminUser) values (@ClientID,@CustomerID,@AdminUser)");

..当在 SqlCommand 中沿行运行该字符串时,正确的值会放在正确的位置。 我习惯于使用大括号作为字符串格式参数而不是@符号,所以想知道在哪里可以了解更多信息?

String.Format and SqlParameters

这段代码实际上不需要String.Format

String.Format 适用于您通常会执行"字符串"+变量+"更多字符串"的时间。这将写成String.Format("string{0}morestring", variable);在这种情况下,它只是一个字符串,所以这就是为什么没有必要......没有任何东西连接在一起。

这是对 String.Format 的一个很好的解释。

这里发生的事情是,@VariableName正在填充您的 SqlParameters 以避免 SQL 注入。简而言之,当您创建 SqlParameter 时,.NET 库会查找与名称匹配的 SQL 参数(可以是存储过程、函数等),或者查找 SQL 文本中以 @ 开头并与名称匹配的任何项。

这是对 SqlParameters 如何工作的很好的解释

我认为这里有一些混乱。@符号用于标识 INSERT INTO 语句中的命名 SQL 参数,而不是用于String.Format

这与

String.Format 不同,实际发生的是你正在运行 SQL 命令,该命令查找名为 @ClientID,@CustomerID 和 @AdminUser 的变量,这些变量作为参数传递给 SQL Server。你会有类似cmd.Parameters = arrparams的东西。

SQL文本周围的实际String.Format部分是多余的,你是对的,它将像你建议的那样使用大括号路线。

希望这有帮助。