0

我一直在查看.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 中运行该字符串时,将正确的值放入正确的位置。我习惯于使用花括号作为字符串格式化参数而不是@符号,所以想知道在哪里可以了解更多信息?

4

3 回答 3

1

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

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

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

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

这里很好地解释了 SqlParameters 如何工作

于 2012-06-15T15:11:20.537 回答
0

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

于 2012-06-15T15:12:22.887 回答
0

这与 String.Format 不同,实际发生的情况是您正在运行 SQL 命令,该命令查找名为 @ClientID、@CustomerID 和 @AdminUser 的变量,这些变量作为参数传递给 SQL Server。您将有类似 cmd.Parameters = arrparams 的东西再往下一点。

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

希望这可以帮助。

于 2012-06-15T15:17:59.703 回答