Files
Desktop_TemperatureKeyPress…/Database/DbExecutor.vb

377 lines
12 KiB
VB.net
Raw Normal View History

2025-12-11 11:49:22 +08:00
Imports System.Data.Common
Imports System.Data.SqlClient
Imports System.Data.SQLite
Imports MySql.Data.MySqlClient
''' <summary>
''' 数据库通用命令执行器
''' 时间2020-12-21
''' 作者ML
''' 版本1.0
''' </summary>
Public Class DbExecutor
Implements IDisposable
''' <summary>
''' 数据库类型,目前支持Mysql与Sqlite
''' </summary>
Enum DbTypeEnum
Mysql
Sqlite
Mssql
End Enum
Private ReadOnly _connectionString As String '数据库连接语句
Private ReadOnly _dbType As DbTypeEnum '数据库类型
Private _connection As DbConnection '数据库连接句柄
Private _command As DbCommand '数据库命令句柄
Private _dataAdapter As DbDataAdapter '数据库查询填充器句柄
Private _transaction As DbTransaction '数据库事务句柄
Private _commandHelper As DbCmdHelper '数据库语句填充助手
Sub New(type As DbTypeEnum, connectionString As String)
_dbType = type
_connectionString = connectionString
InitByDbType(_dbType)
End Sub
Private Sub InitByDbType(type As DbTypeEnum)
Select Case type
Case DbTypeEnum.Mysql
_connection = New MySqlConnection()
_command = _connection.CreateCommand()
_dataAdapter = New MySqlDataAdapter() With {.MissingSchemaAction = MissingSchemaAction.AddWithKey}
_commandHelper = New MysqlCmdHelper()
Case DbTypeEnum.Sqlite
_connection = New SQLiteConnection()
_command = _connection.CreateCommand()
_dataAdapter = New SQLiteDataAdapter() With {.MissingSchemaAction = MissingSchemaAction.AddWithKey}
_commandHelper = New SqliteCmdHelper()
Case DbTypeEnum.Mssql
_connection = New SqlConnection()
_command = _connection.CreateCommand()
_dataAdapter = New SqlDataAdapter() With {.MissingSchemaAction = MissingSchemaAction.AddWithKey}
_commandHelper = New MssqlCmdHelper()
End Select
End Sub
Public ReadOnly Property DatabaseType() As DbTypeEnum
Get
Return _dbType
End Get
'Set(value As DbTypeEnum)
' _dbType = value
' '执行上一个数据库的关闭操作
' InitByDbType(_dbType)
'End Set
End Property
Public ReadOnly Property Connection() As DbConnection
Get
Return _connection
End Get
End Property
Public ReadOnly Property Command() As DbCommand
Get
Return _command
End Get
End Property
Public ReadOnly Property CmdHelper() As DbCmdHelper
Get
Return _commandHelper
End Get
End Property
''' <summary>
''' 打开数据库连接
''' </summary>
''' <returns></returns>
Public Function Open() As Boolean
If _connection Is Nothing Then Return False
If String.IsNullOrWhiteSpace(_connectionString) Then Return False
Try
_connection.ConnectionString = _connectionString
_connection.Open()
Catch ex As Exception
Throw
End Try
Return True
End Function
''' <summary>
''' 关闭数据库连接
''' </summary>
Public Sub Close()
If _connection Is Nothing Then Return
If _connection.State = ConnectionState.Closed Then Return
_connection.Close()
End Sub
''' <summary>
''' 创建当前连接的命令执行句柄
''' </summary>
''' <returns></returns>
Public Function CreateCommand() As DbCommand
Return _connection.CreateCommand()
End Function
''' <summary>
''' 运行非查询语句,返回执行该语句受到影响的行数
''' </summary>
''' <param name="commandText">执行的数据库命令文本</param>
''' <returns></returns>
Public Function ExecuteNonQuery(commandText As String) As Integer
Dim result As Integer
Try
_command.CommandText = commandText
result = _command.ExecuteNonQuery()
Catch ex As Exception
Throw
End Try
Return result
End Function
''' <summary>
''' 使用命令参数模式执行非查询语句,返回执行该语句受到影响的行数
''' </summary>
''' <param name="commandText">执行的数据库命令文本</param>
''' <param name="commandParams">执行的数据库命令参数</param>
''' <returns></returns>
Public Function ExecuteNonQuery(commandText As String, commandParams As DbParameterCollection) As Integer
Dim result As Integer
Try
_command.CommandText = commandText
_command.Parameters.Clear()
For Each param As DbParameter In commandParams
_command.Parameters.Add(param)
Next
result = _command.ExecuteNonQuery()
Catch ex As Exception
Throw
End Try
Return result
End Function
''' <summary>
''' 执行数据库语句,返回数据库读取流的句柄
''' </summary>
''' <param name="commandText">执行的数据库命令文本</param>
''' <returns></returns>
Public Function ExecuteReader(commandText As String) As DbDataReader
Dim result As DbDataReader
Try
_command.CommandText = commandText
result = _command.ExecuteReader()
Catch ex As Exception
Throw
End Try
Return result
End Function
''' <summary>
''' 使用命令参数模式执行数据库语句,返回数据库读取流的句柄
''' </summary>
''' <param name="commandText">执行的数据库命令文本</param>
''' <param name="commandParams">执行的数据库命令参数</param>
''' <returns></returns>
Public Function ExecuteReader(commandText As String, commandParams As DbParameterCollection) As DbDataReader
Dim result As DbDataReader
Try
_command.CommandText = commandText
_command.Parameters.Clear()
For Each param As DbParameter In commandParams
_command.Parameters.Add(param)
Next
result = _command.ExecuteReader()
Catch ex As Exception
Throw
End Try
Return result
End Function
''' <summary>
''' 执行数据库语句,返回查询结果的第一行第一列的内容
''' </summary>
''' <param name="commandText">执行的数据库命令文本</param>
''' <returns></returns>
Public Function ExecuteScalar(commandText As String) As Object
Dim result As Object
Try
_command.CommandText = commandText
result = _command.ExecuteScalar()
Catch ex As Exception
Throw
End Try
Return result
End Function
''' <summary>
''' 使用命令参数模式执行数据库语句,返回查询结果的第一行第一列的内容
''' </summary>
''' <param name="commandText">执行的数据库命令文本</param>
''' <param name="commandParams">执行的数据库命令参数</param>
''' <returns></returns>
Public Function ExecuteScalar(commandText As String, commandParams As DbParameterCollection) As Object
Dim result As Object
Try
_command.CommandText = commandText
_command.Parameters.Clear()
For Each param As DbParameter In commandParams
_command.Parameters.Add(param)
Next
result = _command.ExecuteScalar()
Catch ex As Exception
Throw
End Try
Return result
End Function
''' <summary>
''' 执行数据库语句,返回执行结果返回的数据表,常用于查询命令
''' </summary>
''' <param name="commandText">执行的数据库命令文本</param>
''' <returns></returns>
Public Function ExecuteDataTable(commandText As String, Optional withKey As Boolean = True) As DataTable
Dim dataTable As New DataTable
Try
_command.CommandText = commandText
If withKey Then
_dataAdapter.MissingSchemaAction = MissingSchemaAction.AddWithKey
Else
_dataAdapter.MissingSchemaAction = MissingSchemaAction.Add
End If
_dataAdapter.SelectCommand = _command
_dataAdapter.Fill(dataTable)
Catch ex As Exception
Return Nothing
End Try
Return dataTable
End Function
''' <summary>
''' 执行数据库语句,返回执行结果返回的数据表,常用于查询命令
''' </summary>
''' <param name="commandText">执行的数据库命令文本</param>
''' <param name="commandParams">执行的数据库命令参数</param>
''' <returns></returns>
Public Function ExecuteDataTable(commandText As String, commandParams As DbParameterCollection) As DataTable
Dim dataTable As New DataTable
Try
_command.CommandText = commandText
_command.Parameters.Clear()
For Each param As DbParameter In commandParams
_command.Parameters.Add(param)
Next
_dataAdapter.SelectCommand = _command
_dataAdapter.Fill(dataTable)
Catch ex As Exception
Throw
End Try
Return dataTable
End Function
''' <summary>
''' 开启事务
''' </summary>
''' <returns></returns>
Public Function BeginTransaction() As DbTransaction
_transaction = _connection.BeginTransaction()
Return _transaction
End Function
''' <summary>
''' 提交事务
''' </summary>
Public Sub CommitTransaction()
Try
_transaction.Commit()
Catch ex As Exception
Throw
End Try
End Sub
''' <summary>
''' 回滚事务
''' </summary>
Public Sub RollbackTransaction()
Try
_transaction.Rollback()
Catch ex As Exception
Throw
End Try
End Sub
''' <summary>
''' 创建数据参数
''' </summary>
''' <param name="type">参数数据类型</param>
''' <param name="ParameterName">参数名称</param>
''' <param name="value">参数值</param>
''' <returns></returns>
Public Function CreateDbParameter(type As DbType, parameterName As String, value As Object) As DbParameter
Dim dbParam As DbParameter = _command.CreateParameter()
dbParam.DbType = type
dbParam.ParameterName = parameterName
dbParam.Value = value
Return dbParam
End Function
''' <summary>
''' 添加数据参数
''' </summary>
''' <param name="type"></param>
''' <param name="parameterName"></param>
''' <param name="value"></param>
''' <returns></returns>
Public Function AddDbParameter(type As DbType, parameterName As String, value As Object) As DbParameter
Dim dbParam As DbParameter = _command.CreateParameter()
dbParam.DbType = type
dbParam.ParameterName = parameterName
dbParam.Value = value
_command.Parameters.Add(dbParam)
Return dbParam
End Function
''' <summary>
''' 清空数据
''' </summary>
Public Sub ClearDbParameter()
_command.Parameters.Clear()
End Sub
''' <summary>
''' 回收资源
''' </summary>
Public Sub Dispose() Implements IDisposable.Dispose
If _connection IsNot Nothing Then
If _connection.State = ConnectionState.Open Then
_connection.Close()
End If
_connection.Dispose()
End If
If _command IsNot Nothing Then _command.Dispose()
If _dataAdapter IsNot Nothing Then _dataAdapter.Dispose()
GC.Collect() '对所有缓存垃圾进行回收
End Sub
End Class