377 lines
12 KiB
VB.net
377 lines
12 KiB
VB.net
|
|
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
|