VB.NET学习笔记:ADO.NET操作ACCESS数据库——读写ACCESS数据库的OleDbHelper帮助类

这篇博客介绍了如何基于VB.NET利用改编自微软官方SqlHelper的OleDbHelper类来实现对ACCESS数据库的读写操作,详细讲解了数据库操作类的使用方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文代码由微软官方原版SqlHelper类改编而来,如何获取微软官方原版SqlHelper类请阅读《ADO.NET操作ACCESS数据库——微软官方原版SqlHelper类

Imports System.Data
Imports System.Data.OleDb

Public NotInheritable Class OleDbHelper
   #Region "私有构造函数和方法"
    ''' <summary>
    ''' 由于此类只提供静态方法,因此将默认构造函数设为私有以防止使用“new OleDbHelper()”创建的实例'。
    ''' </summary>
    Private Sub New()
    End Sub ' New

    ''' <summary>
    '''此方法用于将OleDbparameters参数数组(参数值)分配给OleDbcommand命令。
    '''这个方法将给任何一个参数分配DBNull.Value
    '''将阻止使用默认值
    ''' </summary>
    ''' <param name="command">要分配OleDbparameters参数的OleDbcommand命令</param>
    ''' <param name="commandParameters">OleDbparameters参数数组</param>
    Private Shared Sub AttachParameters(ByVal command As OleDbCommand, ByVal commandParameters() As OleDbParameter)
        If (command Is Nothing) Then Throw New ArgumentNullException("command")
        If (Not commandParameters Is Nothing) Then
            Dim p As OleDbParameter
            For Each p In commandParameters
                If (Not p Is Nothing) Then
                    '检查未分配值的派生输出值
                    If (p.Direction = ParameterDirection.InputOutput OrElse p.Direction = ParameterDirection.Input) AndAlso p.Value Is Nothing Then
                        p.Value = DBNull.Value
                    End If
                    command.Parameters.Add(p)
                End If
            Next p
        End If
    End Sub ' AttachParameters

    ''' <summary>
    ''' 此方法打开(如果需要)并分配连接、事务、命令类型和参数到提供的命令。
    ''' </summary>
    ''' <param name="command">要准备的OleDbCommand命令</param>
    ''' <param name="connection">一个有效的数据库连接,用于执行此命令</param>
    ''' <param name="transaction">一个有效的事务或者是null值</param>
    ''' <param name="commandType">命令类型 (存储过程,命令文本等)</param>
    ''' <param name="commandText">存储过程名或SQL命令文本</param>
    ''' <param name="commandParameters">与该命令关联的OLEDBParameters数组,如果不需要参数,则为“null”</param>
    ''' <param name="mustCloseConnection">如果连接是打开的,则为true,其它情况下为false</param>
    Private Shared Sub PrepareCommand(ByVal command As OleDbCommand,
                                      ByVal connection As OleDbConnection,
                                      ByVal transaction As OleDbTransaction,
                                      ByVal commandType As CommandType,
                                      ByVal commandText As String,
                                      ByVal commandParameters() As OleDbParameter, ByRef mustCloseConnection As Boolean)

        If (command Is Nothing) Then Throw New ArgumentNullException("command")
        If (commandText Is Nothing OrElse commandText.Length = 0) Then Throw New ArgumentNullException("commandText")

        '如果提供的连接未打开,我们将打开它
        If connection.State <> ConnectionState.Open Then
            If connection.State = ConnectionState.Broken Then
                connection.Close()
                connection.Open()
            Else
                connection.Open()
            End If

            mustCloseConnection = True
        Else
            mustCloseConnection = False
        End If

        '将连接与命令关联
        command.Connection = connection

        '设置命令文本(存储过程名称或SQL语句)
        command.CommandText = commandText

        '分配事务
        If Not (transaction Is Nothing) Then
            If transaction.Connection Is Nothing Then Throw New ArgumentException("The transaction was rollbacked or commited, please provide an open transaction.", "transaction")
            command.Transaction = transaction
        End If

        ' 设置命令类型.
        command.CommandType = commandType

        ' 分配命令参数
        If Not (commandParameters Is Nothing) Then
            AttachParameters(command, commandParameters)
        End If
        Return
    End Sub ' PrepareCommand
#End Region

#Region "ExecuteNonQuery"

    ''' <summary>
    ''' 对指定连接字符串的数据库执行OLEDBCommand命令(不返回任何结果集,不接受任何参数)。
    ''' 示例:
    ''' dim result as integer=executeNonQuery(connstring,commandType.storedProcedure,“publishOrders”)。
    ''' </summary>
    ''' <param name="connectionString">一个有效的数据库连接字符串</param>
    ''' <param name="commandType">命令类型 (存储过程,命令文本等)</param>
    ''' <param name="commandText">存储过程名称或SQL语句</param>
    ''' <returns>返回命令影响的行数</returns>
    Public Overloads Shared Function ExecuteNonQuery(ByVal connectionString As String,
                                                   ByVal commandType As CommandType,
                                                   ByVal commandText As String) As Integer
        'OledBParameters参数数组为Nothing
        Return ExecuteNonQuery(connectionString, commandType, commandText, CType(Nothing, OleDbParameter()))
    End Function ' ExecuteNonQuery

    ''' <summary>
    ''' 使用提供的参数对指定连接字符串的数据库执行OLEDBCommand命令(不返回任何结果集)
    ''' 示例:
    ''' Dim result As Integer = ExecuteNonQuery(connString, CommandType.StoredProcedure, "PublishOrders", new OleDbParameter("@prodid", 24))
    ''' </summary>
    ''' <param name="connectionString">一个有效的数据库连接字符串</param>
    ''' <param name="commandType">命令类型 (存储过程,命令文本等)</param>
    ''' <param name="commandText">存储过程名称或SQL语句</param>
    ''' <param name="commandParameters">用于执行命令的OleDbParameter参数数组</param>
    ''' <returns>返回命令影响的行数</returns>
    Public Overloads Shared Function ExecuteNonQuery(ByVal connectionString As String,
                                                     ByVal commandType As CommandType,
                                                     ByVal commandText As String,
                                                     ByVal ParamArray commandParameters() As OleDbParameter) As Integer
        If (connectionString Is Nothing OrElse connectionString.Length = 0) Then Throw New ArgumentNullException("connectionString")
        '创建并打开一个OLEDB连接,完成后将其丢弃
        Dim connection As OleDbConnection
        Try
            connection = New OleDbConnection(connectionString)
            connection.Open()

            '调用将连接替换为连接字符串的重载
            Return ExecuteNonQuery(connection, commandType, commandText, commandParameters)
        Finally
            If Not connection Is Nothing Then connection.Dispose()
        End Try
    End Function ' ExecuteNonQuery

    ''' <summary>
    ''' 对提供的数据库连接对象执行OleDbCommand命令(不返回结果集,不接受参数)。
    ''' 示例:
    ''' Dim result As Integer = ExecuteNonQuery(conn, CommandType.StoredProcedure, "PublishOrders")
    ''' </summary>
    ''' <param name="connection">一个有效的数据库连接对象</param>
    ''' <param name="commandType">命令类型(存储过程,命令文本等)</param>
    ''' <param name="commandText">存储过程名称或SQL语句</param>
    ''' <returns>返回影响的行数</returns>
    Public Overloads Shared Function ExecuteNonQuery(ByVal connection As OleDbConnection,
                                                     ByVal commandType As CommandType,
                                                     ByVal commandText As String) As Integer
        'OledBParameters参数数组为Nothing
        Return ExecuteNonQuery(connection, commandType, commandText, CType(Nothing, OleDbParameter()))

    End Function ' ExecuteNonQuery

    ''' <summary>
    ''' 使用提供的参数对指定的数据库连接对象执行OLEDBCommand(不返回任何结果集)
    ''' 示例:
    ''' Dim result As Integer = ExecuteNonQuery(conn, CommandType.StoredProcedure, "PublishOrders", new OleDbParameter("@prodid", 24))
    ''' </summary>
    ''' <param name="connection">一个有效的数据库连接对象</param>
    ''' <param name="commandType">命令类型(存储过程,命令文本等)</param>
    ''' <param name="commandText">存储过程名称或SQL语句</param>
    ''' <param name="commandParameters">用于执行命令的OleDbParameter参数数组</param>
    ''' <returns>返回影响的行数</returns>
    Public Overloads
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值