【发布时间】:2012-02-29 21:58:57
【问题描述】:
有人知道在 VB.NET 中创建和初始化SqlParameters 的更好方法吗?每个变量使用 3 行似乎非常过分。不幸的是,这个类的constructors 相当荒谬,所以我正在考虑编写自己的子程序来初始化每个参数。这就是我一直以来的做法。
Dim ID As New SqlParameter("@ID", SqlDbType.Int)
ID.Value = val
query.Parameters.Add(ID)
这里是我使用的完整代码,即使是一个只需要一个参数的简单存储过程。但是我有一些需要 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,其中两个支持<Extension()>s。
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()
【问题讨论】:
-
我做了一个扩展方法,以 SqlCommand 类为目标来处理添加参数。
-
天哪,你们让我很难选择。 The_Black_Smurf 和 LarsTech 都给出了出色的答案。我选择了一种混合动力车。社区指南建议在出现平局时将答案提供给代表较少的人作为礼貌。对于任何寻找答案的人来说,这两个都很棒。 :)
标签: vb.net sqlparameter