代码之家  ›  专栏  ›  技术社区  ›  Arseni Mourzenko

SqlCommand.Parameters.AddWithValue真正做什么?

  •  3
  • Arseni Mourzenko  · 技术社区  · 15 年前

    什么变化 SqlCommand.Parameters.AddWithValue()

    我希望:

    1. 它取代了 ' 按字符 ''

    2. ' ,例如 select * from A where B = @hello 将给予 select * from A where B = 'hello world'

    3. 如果一个参数值是一个“安全”的值,比如一个整数,那么它会按原样插入到查询中,不带引号,所以 select * from A where B = @one 会给 select * from A where B = 1

    还有什么我不知道的变化吗?

    2 回复  |  直到 15 年前
        1
  •  7
  •   marc_s    15 年前

    ADO.NET SqlClient驱动程序将 做任何替换!这是一个常见的误解-它避免了更换任何东西的麻烦。

    它所做的就是用参数传递查询 @param1 ... @paramN 直接转到SQL Server,以及一组参数名称/值对。然后,SQLServer使用 sp_executesql 存储过程。

    从来没有进行过替换,客户端也没有“将完整的SQL语句串在一起”这样的事情。如果ADO.NET运行时就是这样做的,那么它也很容易受到SQL注入攻击。

        2
  •  0
  •   Robert Harvey    15 年前

    简而言之,使用它会在SqlParameterCollection的末尾添加一个值,同时使您的参数值不受SQL注入的影响。

    MSDN文档没有记录该方法的确切内部行为,我怀疑它是否符合您所描述的。但是,如果愿意,可以使用查看方法的源代码 Reflector 看看它到底是干什么的。

    推荐文章