【问题标题】:Do These Extension Methods Look Correct?这些扩展方法看起来正确吗?
【发布时间】:2011-01-18 22:10:24
【问题描述】:

在 VB.NET 中,我正在为 SqlParameterCollection 类创建扩展方法,以便可以在一行代码中添加“详细”参数。我知道 .AddWithValue 方法将导致 SQL Server 每次通过带有未指定字母数字数据类型(即 VarChar 或 NVarChar)大小的 SqlParameter 对象的 SqlCommand 调用存储过程时重新评估 SQL Server 执行计划。换句话说,.AddWithValue 是一个坏主意,除了像 INT 数据类型这样的数据类型的大小是常数的类型。

我以前从未使用过扩展方法,那么这段代码似乎可以实现我想要的吗?代码“有效”,但我正在寻找另一双眼睛,以确保我不会以会强制重新评估 SQL Server 执行计划的参数结束。

编辑:我必须将参数实际添加到“params”集合中,所以我更新了代码。现在它“工作”了;-)

Imports System.Runtime.CompilerServices

Public Module AdoParameterExtensions

    <System.Runtime.CompilerServices.Extension()> _
    Public Sub AddWithNumericValue(ByVal params As System.Data.SqlClient.SqlParameterCollection, ByVal parameterName As String, ByVal parameterType As SqlDbType, ByVal value As Object)

        Dim newParam As New System.Data.SqlClient.SqlParameter

        With newParam

            .ParameterName = parameterName
            .SqlDbType = parameterType
            .Value = value

        End With

        params.Add(newParam)

    End Sub

    <System.Runtime.CompilerServices.Extension()> _
    Public Sub AddWithStringValue(ByVal params As System.Data.SqlClient.SqlParameterCollection, ByVal parameterName As String, ByVal parameterType As SqlDbType, ByVal size As Integer, ByVal value As Object)

        Dim newParam As New System.Data.SqlClient.SqlParameter

        With newParam

            .ParameterName = parameterName
            .SqlDbType = parameterType
            .Size = size
            .Value = value

        End With

        params.Add(newParam)

    End Sub

End Module

感谢您的反馈。

【问题讨论】:

    标签: .net vb.net extension-methods


    【解决方案1】:

    您的扩展程序看起来不错。是否对 SQL Server 执行计划进行良好的重新评估不会受到使用扩展方法的影响。

    我提出的一个建议是返回 SqlParameterCollection 而不是 void (Sub)。然后就可以流畅地添加参数了。

    代替

    params.AddWithNumericValue(...)
    params.AddWithNumericValue(...)
    params.AddWithNumericValue(...)
    

    你写成

    params.AddWithNumericValue(...).AddWithNumericValue(...).AddWithNumericValue(...)
    

    这是一种偏好,但有了这样的扩展,我开始欣赏这种风格。

    【讨论】:

      猜你喜欢
      • 2014-02-28
      • 2019-04-07
      • 1970-01-01
      • 1970-01-01
      • 2012-09-25
      • 1970-01-01
      • 2015-06-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多