SqlParameter
VB.NET で sを作成および初期化するより良い方法を知っている人はいますか? 変数ごとに 3 行を使用するのは、かなり過剰に思えます。残念ながら、このクラスのコンストラクターはかなりばかげているので、各パラメーターを初期化するための独自のサブルーチンを作成することを考えています。これが私がやってきた方法です。
Dim ID As New SqlParameter("@ID", SqlDbType.Int)
ID.Value = val
query.Parameters.Add(ID)
以下は、引数を 1 つしかとらない単純なストア プロシージャにも使用する完全なコードです。ただし、15 ~ 20 かかるものもいくつかあります。これは、この不格好な方法を使用した大量のコード行です。
Dim query As New SqlCommand("spGetInitStatusEntry", connection)
query.CommandType = CommandType.StoredProcedure
Dim ID As New SqlParameter("@ID", SqlDbType.Int)
ID.Value = val
query.Parameters.Add(ID)
Dim dt As New DataTable
Dim da As New SqlDataAdapter(query)
da.Fill(dt)
最終的な実装
Module
推奨どおり、2 つのサポート を使用して、次の を作成しました<Extension()>
。
Module TcomExtensions
<System.Runtime.CompilerServices.Extension()> _
Public Sub AddParameter(ByRef dbCommand As SqlCommand, ByVal parameterName As String, _
ByVal parameterValue As Object, ByVal dbType As SqlDbType)
Dim dbParameter As SqlParameter = Nothing
dbParameter = dbCommand.CreateParameter
dbParameter.ParameterName = parameterName
dbParameter.Value = parameterValue
dbParameter.DbType = dbType
dbCommand.Parameters.Add(dbParameter)
End Sub
<System.Runtime.CompilerServices.Extension()> _
Public Function ToDataTable(ByVal value As SqlCommand) As DataTable
Dim dt As New DataTable
Using da As New SqlDataAdapter(value)
da.Fill(dt)
End Using
Return dt
End Function
End Module
そして、私の実装は次のようになります。
Dim spPrefill As New SqlCommand("spGetPrefillStatusEntry", connection) With {.CommandType = CommandType.StoredProcedure}
'Only one line per added parameter.
spPrefill.AddParameter("@ID", val, SqlDbType.Int)
'Populate the table.
dt = spPrefill.ToDataTable()