繁体   English   中英

String.Format和SqlParameters

[英]String.Format and SqlParameters

我一直在浏览.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部分是多余的,它将像您建议的那样使用花括号路由。

希望这可以帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM