String.Format和SqlParameters

时间:2012-06-15 15:09:39

标签: c# string-formatting

我一直在浏览.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中沿着该行运行该字符串时,正确的值被放入正确的位置。我习惯使用花括号来表示字符串格式化参数而不是@符号,所以想知道在哪里可以了解更多这方面的内容?

3 个答案:

答案 0 :(得分:1)

此代码实际上不需要String.Format

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

Here is a good explanation of String.Format

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

And here is a good explanation of how SqlParameters work

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

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

希望这有帮助。