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
。
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部分是多余的,你是对的,它将像你建议的那样使用大括号路线。
希望这有帮助。