我一直在浏览.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中沿着该行运行该字符串时,正确的值被放入正确的位置。我习惯使用花括号来表示字符串格式化参数而不是@
符号,所以想知道在哪里可以了解更多这方面的内容?
答案 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文本中以@并匹配名称。
答案 1 :(得分:0)
我认为这里有一些混乱。 @
符号用于标识INSERT INTO
语句中的命名SQL参数,而不是String.Format
。
答案 2 :(得分:0)
这与String.Format类似,实际发生的是运行SQL命令,该命令查找名为@ ClientID,@ CustomerID和@AdminUser的变量,这些变量作为参数传递给SQL Server。你会有更多像cmd.Parameters = arrparams这样的东西。
SQL文本周围的实际String.Format部分是多余的,你是对的,它会像你建议的那样使用花括号路径。
希望这有帮助。