代码之家  ›  专栏  ›  技术社区  ›  DanP

未使用的sql参数-它们有什么危害吗?

  •  4
  • DanP  · 技术社区  · 14 年前

    考虑以下代码:

    Dim sql = "SELECT * FROM MyTable WHERE value1 = @Param1"
    
    If someCondition Then
       sql = sql + " AND value2 = @Param2"
    End If
    
    Dim cmd As New SqlCommand(sql, conn)
    cmd.Parameters.AddWithValue("@Param1", param1Value)
    cmd.Parameters.AddWithValue("@Param2", param2Value)
    

    @Param2 参数-将其作为参数添加到命令中有什么坏处吗?

    我真正的用例显然远比这复杂,但总的来说,这是我应该避免的模式吗?如果是,为什么?

    2 回复  |  直到 14 年前
        1
  •  1
  •   marc_s dmck    14 年前

    我唯一要注意的是如果你打电话 .AddWithValue ,则由SQLServer确定参数的数据类型。

    SQL Server在猜测方面做得非常好—但有时,它会以“次优”的方式进行猜测,提供详细信息会对您有所帮助。

    SqlParameter aParam = new SqlParameter("@Param1", SqlDbType.VarChar, 50);
    aParam.Value = param1Value;
    

    这有两个主要好处:

    • 您需要定义显式类型,这一点很重要,例如在使用VARCHAR和NVARCHAR时(否则您可能会导致大量不必要的类型转换)
    • 您可以定义字符串参数的最大长度

    这需要更多的工作,但是您可以获得更多的控制,并且如果让SQLServer来猜测您的类型,可能会避免不必要的、耗时的数据类型转换和其他意外的副作用。

        2
  •  0
  •   hav2play21    14 年前

    最好的做法是避免传入不需要的参数。如果您传入一个没有值的参数,那么它要么假设您正在寻找一个空字符串,要么它将给您一个错误,它无法处理请求。