这些扩展方法看起来是否正确?

时间:2011-01-18 22:10:24

标签: .net vb.net extension-methods

在VB.NET中,我正在为SqlParameterCollection类创建扩展方法,以便我可以在一行代码中添加“详细”参数。我知道.AddWithValue方法将导致SQL Server每次通过SqlCommand调用存储过程时重新评估SQL Server执行计划,其中SqlParameter对象未指定字母数字数据类型的大小(即VarChar或NVarChar)。换句话说,.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

感谢您的反馈。

1 个答案:

答案 0 :(得分:3)

您的扩展程序看起来很好。是否使用Extension方法不会影响SQL Server执行计划的重新评估。

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

而不是

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

你写的是

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

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