【问题标题】:Set SqlParameter in VB.NET?在 VB.NET 中设置 SqlParameter?
【发布时间】:2013-05-27 12:55:57
【问题描述】:

我是新的课程,我想创建一个 SqlCommandManager 课程,但我不知道如何在我的课程中传递 SqlParameter

例如,如果我想插入数据,我会像下面的客户端一样使用我的类。

'Client

Dim m_SqlComManager as new SQLCommandManager("MyConnectionString")
m_SqlCommandManager.Commandtext = "INSERT INTO [TableName]([Field1],[Field2])VALUES(@Field1,Field2);"
m_SqlCommandManager.Parameters.AddWithValue("@Field1","SomeValue1")
m_SqlCommandManager.Parameters.AddWithValue("@Field2","SomeValue2")
m_SqlCommandManager.ExecuteNonQuery()


'Here is my class

Imports System.Data.SqlClient
Public Class SQLCommandManager
Private m_SqlParameters As SqlParameter()
Private m_Commandtext As String
Private m_ConStr As String

Public WriteOnly Property SQlParameter() As SqlParameter()
    Set(ByVal value As SqlParameter())
        value = m_SqlParameters
    End Set
End Property

Public Property CommandText() As String
    Get
        Return m_Commandtext
    End Get
    Set(ByVal value As String)
        value = m_Commandtext
    End Set
End Property

Public Sub New(ByVal con As String)
    m_ConStr = con
End Sub

Public Sub ExecuteNonQuery()
    Using con As New SqlConnection(m_ConStr)
        Using com As New SqlCommand
            com.Connection = con
            com.CommandText = m_Commandtext
            'Please help
            'How can i insert parameter here from client..

            If con.State = ConnectionState.Closed Then
                con.Open()
            End If
            com.ExecuteNonQuery()
        End Using
    End Using
End Sub
End Class

如何设置ExecuteNonQuery方法前的参数?

提前谢谢..

【问题讨论】:

    标签: vb.net


    【解决方案1】:

    我会这样做:

    Public Class SqlCommandManager
        Private m_SqlParameters As List(Of SqlParameter)
        Private m_Commandtext As String
        Private m_ConStr As String
    
        Public Sub New()
            m_SqlParameters = New List(Of SqlParameter)()
        End Sub
    
        Public ReadOnly Property SqlParameters() As List(Of SqlParameter)
            Get
                Return m_SqlParameters
            End Get
        End Property
    
        Public Property CommandText() As String
            Get
                Return m_Commandtext
            End Get
            Set
                value = m_Commandtext
            End Set
        End Property
    
        Public Sub New(con As String)
            m_ConStr = con
        End Sub
    
        Public Sub ExecuteNonQuery()
            Using con As New SqlConnection(m_ConStr)
                Using com As New SqlCommand(m_Commandtext, con)
                    com.Parameters.AddRange(m_SqlParameters.ToArray())
    
                    con.Open()
                    com.ExecuteNonQuery()
                    con.Close()
                End Using
            End Using
        End Sub
    End Class
    

    我改变了什么:

    • 将类名更改为 SqlCommandManager 以符合 Microsoft 的建议(不要在缩写中大写超过 2 个字母;IO 可以,SqlXml 不应该是全部大写)

    • 我会使用 List(Of SqlParameter) 而不是数组 - 更容易处理,更容易向其中添加其他参数

    • 我更喜欢将 CommandTextSqlConnection 直接传递给 SqlCommand 的构造函数 - 这样,您绝对不会忘记这两个重要信息!

    • 就在您的.ExecuteQuery 之前,使用对.AddRange() 的一次调用将列表中定义的参数添加到SqlCommand 的参数数组中

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-10-02
      • 1970-01-01
      • 1970-01-01
      • 2012-05-07
      • 2013-02-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多