【问题标题】:Is there any way to reduce this ado.net code?有什么办法可以减少这个 ado.net 代码?
【发布时间】:2013-03-27 04:04:00
【问题描述】:

我需要大大减少这段代码,有没有办法创建一个描述其方向的sql参数? 代码如下:

    Dim Oparam1 As SqlParameter = New SqlParameter("@ROJO", SqlDbType.Int)
    Dim Oparam2 As SqlParameter = New SqlParameter("@AMBAR", SqlDbType.Int)
    Dim Oparam3 As SqlParameter = New SqlParameter("@AMARILLO", SqlDbType.Int)
    Dim Oparam4 As SqlParameter = New SqlParameter("@VERDE", SqlDbType.Int)
    Oparam1.Direction = ParameterDirection.Output
    Oparam2.Direction = ParameterDirection.Output
    Oparam3.Direction = ParameterDirection.Output
    Oparam4.Direction = ParameterDirection.Output
    command.Parameters.Add(Oparam1)
    command.Parameters.Add(Oparam2)
    command.Parameters.Add(Oparam3)
    command.Parameters.Add(Oparam4)

提前致谢。

【问题讨论】:

  • 我看到 3 组 4 行几乎相同的代码。创建一个方法并传入可以变化的参数。

标签: .net ado.net sqlparameter


【解决方案1】:

对于您可以使用的每个参数

C#

command.Parameters.Add(new SqlParameter("@name", SqlDbType.Int)
    {Direction = ParameterDirection.Output});

VB.NET

command.Parameters.Add(New SqlParameter("@name", SqlDbType.Int) With { _
    .Direction = ParameterDirection.Output _
})

【讨论】:

    【解决方案2】:

    有一个overload of the constructor that includes the direction,但是你必须指定很多其他参数,所以代码不会更短。

    你可以做一个扩展方法:

    Imports System.Runtime.CompilerServices
    
    Module SqlExtensions
    
      <Extension()>
      Public Function SetOutput(parameter As SqlParameter) As SqlParameter
        parameter.Direction = ParameterDirection.Output
        Return parameter
      End Function
    
    End Module
    

    现在您可以在参数上使用它:

    command.Parameters.Add(New SqlParameter("@ROJO", SqlDbType.Int).SetOutput())
    command.Parameters.Add(New SqlParameter("@AMBAR", SqlDbType.Int).SetOutput())
    command.Parameters.Add(New SqlParameter("@AMARILLO", SqlDbType.Int).SetOutput())
    command.Parameters.Add(New SqlParameter("@VERDE", SqlDbType.Int).SetOutput())
    

    【讨论】:

      【解决方案3】:

      试试:

      command.Parameters.Add(new SqlParameter("@ROJO", SqlDbType.Int) With {.Direction = ParameterDirection.Output});
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-03-02
        • 1970-01-01
        • 2022-11-22
        • 1970-01-01
        相关资源
        最近更新 更多