Database: Add overload for all methods which accepts a SQLCommand object instead of a SQL query string

This commit is contained in:
Jonathan Jenne 2022-11-02 16:18:31 +01:00
parent 95a0e578da
commit 5481763eb1

View File

@ -4,6 +4,7 @@ Imports System.Data.SqlClient
Imports DigitalData.Modules.Encryption Imports DigitalData.Modules.Encryption
Imports DigitalData.Modules.Logging Imports DigitalData.Modules.Logging
Imports DigitalData.Modules.Base Imports DigitalData.Modules.Base
Imports System.Threading
Public Class MSSQLServer Public Class MSSQLServer
Implements IDatabase Implements IDatabase
@ -292,16 +293,32 @@ Public Class MSSQLServer
End Using End Using
End Function End Function
Public Function GetDatatable(pSqlCommandObject As SqlCommand, pTransaction As SqlTransaction, Optional pTimeout As Integer = Constants.DEFAULT_TIMEOUT) As DataTable
Using oSqlConnection = GetSQLConnection()
Return GetDatatableWithConnectionObject(pSqlCommandObject, oSqlConnection, TransactionMode.ExternalTransaction, pTransaction, pTimeout)
End Using
End Function
Public Async Function GetDatatableAsync(pSqlCommand As String, Optional pTimeout As Integer = Constants.DEFAULT_TIMEOUT) As Task(Of DataTable) Public Async Function GetDatatableAsync(pSqlCommand As String, Optional pTimeout As Integer = Constants.DEFAULT_TIMEOUT) As Task(Of DataTable)
Return Await Task.Run(Function() GetDatatable(pSqlCommand, pTimeout)) Return Await Task.Run(Function() GetDatatable(pSqlCommand, pTimeout))
End Function End Function
Public Async Function GetDatatableAsync(pSqlCommandObject As SqlCommand, Optional pTimeout As Integer = Constants.DEFAULT_TIMEOUT) As Task(Of DataTable)
Return Await Task.Run(Function() GetDatatable(pSqlCommandObject, pTimeout))
End Function
Public Function GetDatatableWithConnection(pSqlCommand As String, pConnectionString As String, Optional Timeout As Integer = Constants.DEFAULT_TIMEOUT) As DataTable Public Function GetDatatableWithConnection(pSqlCommand As String, pConnectionString As String, Optional Timeout As Integer = Constants.DEFAULT_TIMEOUT) As DataTable
Using oConnection = GetConnection(pConnectionString) Using oConnection = GetConnection(pConnectionString)
Return GetDatatableWithConnectionObject(pSqlCommand, oConnection, pTimeout:=Timeout) Return GetDatatableWithConnectionObject(pSqlCommand, oConnection, pTimeout:=Timeout)
End Using End Using
End Function End Function
Public Function GetDatatableWithConnection(pSqlCommandObject As SqlCommand, pConnectionString As String, Optional Timeout As Integer = Constants.DEFAULT_TIMEOUT) As DataTable
Using oConnection = GetConnection(pConnectionString)
Return GetDatatableWithConnectionObject(pSqlCommandObject, oConnection, pTimeout:=Timeout)
End Using
End Function
Public Function GetDatatableWithConnectionObject(pSqlCommand As String, pSqlConnection As SqlConnection, Public Function GetDatatableWithConnectionObject(pSqlCommand As String, pSqlConnection As SqlConnection,
Optional pTransactionMode As TransactionMode = TransactionMode.WithTransaction, Optional pTransactionMode As TransactionMode = TransactionMode.WithTransaction,
Optional pTransaction As SqlTransaction = Nothing, Optional pTransaction As SqlTransaction = Nothing,
@ -338,52 +355,84 @@ Public Class MSSQLServer
Return oTable Return oTable
End Function End Function
Public Function ExecuteNonQuery(SQLCommand As String) As Boolean Implements IDatabase.ExecuteNonQuery Public Function ExecuteNonQuery(pSQLCommand As String) As Boolean Implements IDatabase.ExecuteNonQuery
Using oConnection = GetSQLConnection() Using oConnection = GetSQLConnection()
Return ExecuteNonQueryWithConnectionObject(SQLCommand, oConnection, TransactionMode.WithTransaction, Nothing, QueryTimeout) Return ExecuteNonQueryWithConnectionObject(pSQLCommand, oConnection, TransactionMode.WithTransaction, Nothing, QueryTimeout)
End Using End Using
End Function End Function
Public Function ExecuteNonQuery(SQLCommand As String, Timeout As Integer) As Boolean Implements IDatabase.ExecuteNonQuery Public Function ExecuteNonQuery(pSQLCommandObject As SqlCommand) As Boolean
Using oConnection = GetSQLConnection() Using oConnection = GetSQLConnection()
Return ExecuteNonQueryWithConnectionObject(SQLCommand, oConnection, TransactionMode.WithTransaction, Nothing, Timeout) Return ExecuteNonQueryWithConnectionObject(pSQLCommandObject, oConnection, TransactionMode.WithTransaction, Nothing, QueryTimeout)
End Using End Using
End Function End Function
'<DebuggerStepThrough()> Public Function ExecuteNonQuery(pSQLCommand As String, pTimeout As Integer) As Boolean Implements IDatabase.ExecuteNonQuery
Public Function ExecuteNonQuery(SQLCommand As String, Transaction As SqlTransaction, Optional Timeout As Integer = Constants.DEFAULT_TIMEOUT) As Boolean
Using oConnection = GetSQLConnection() Using oConnection = GetSQLConnection()
Return ExecuteNonQueryWithConnectionObject(SQLCommand, Transaction.Connection, TransactionMode.ExternalTransaction, Transaction, Timeout) Return ExecuteNonQueryWithConnectionObject(pSQLCommand, oConnection, TransactionMode.WithTransaction, Nothing, pTimeout)
End Using End Using
End Function End Function
'<DebuggerStepThrough()> Public Function ExecuteNonQuery(pSQLCommandObject As SqlCommand, pTimeout As Integer) As Boolean
Public Async Function ExecuteNonQueryAsync(SQLCommand As String, Optional Timeout As Integer = Constants.DEFAULT_TIMEOUT) As Task(Of Boolean) Using oConnection = GetSQLConnection()
Return Await Task.Run(Function() ExecuteNonQuery(SQLCommand, Timeout)) Return ExecuteNonQueryWithConnectionObject(pSQLCommandObject, oConnection, TransactionMode.WithTransaction, Nothing, pTimeout)
End Using
End Function
Public Function ExecuteNonQuery(pSQLCommand As String, pTransaction As SqlTransaction, Optional pTimeout As Integer = Constants.DEFAULT_TIMEOUT) As Boolean
Using oConnection = GetSQLConnection()
Return ExecuteNonQueryWithConnectionObject(pSQLCommand, pTransaction.Connection, TransactionMode.ExternalTransaction, pTransaction, pTimeout)
End Using
End Function
Public Function ExecuteNonQuery(pSQLCommandObject As SqlCommand, pTransaction As SqlTransaction, Optional pTimeout As Integer = Constants.DEFAULT_TIMEOUT) As Boolean
Using oConnection = GetSQLConnection()
Return ExecuteNonQueryWithConnectionObject(pSQLCommandObject, pTransaction.Connection, TransactionMode.ExternalTransaction, pTransaction, pTimeout)
End Using
End Function
Public Async Function ExecuteNonQueryAsync(pSQLCommand As String, Optional pTimeout As Integer = Constants.DEFAULT_TIMEOUT) As Task(Of Boolean)
Return Await Task.Run(Function() ExecuteNonQuery(pSQLCommand, pTimeout))
End Function
Public Async Function ExecuteNonQueryAsync(pSQLCommandObject As SqlCommand, Optional pTimeout As Integer = Constants.DEFAULT_TIMEOUT) As Task(Of Boolean)
Return Await Task.Run(Function() ExecuteNonQuery(pSQLCommandObject, pTimeout))
End Function End Function
'<DebuggerStepThrough()>
Public Function ExecuteNonQueryWithConnection(pSQLCommand As String, ConnString As String, Optional Timeout As Integer = Constants.DEFAULT_TIMEOUT) As Boolean Public Function ExecuteNonQueryWithConnection(pSQLCommand As String, ConnString As String, Optional Timeout As Integer = Constants.DEFAULT_TIMEOUT) As Boolean
Using oConnection = GetConnection(ConnString) Using oConnection = GetConnection(ConnString)
Return ExecuteNonQueryWithConnectionObject(pSQLCommand, oConnection, TransactionMode.WithTransaction, Nothing, Timeout) Return ExecuteNonQueryWithConnectionObject(pSQLCommand, oConnection, TransactionMode.WithTransaction, Nothing, Timeout)
End Using End Using
End Function End Function
Public Function ExecuteNonQueryWithConnectionObject(SqlCommand As String, SqlConnection As SqlConnection, Public Function ExecuteNonQueryWithConnection(pSQLCommandObject As SqlCommand, ConnString As String, Optional Timeout As Integer = Constants.DEFAULT_TIMEOUT) As Boolean
Optional TransactionMode As TransactionMode = TransactionMode.WithTransaction, Using oConnection = GetConnection(ConnString)
Optional Transaction As SqlTransaction = Nothing, Return ExecuteNonQueryWithConnectionObject(pSQLCommandObject, oConnection, TransactionMode.WithTransaction, Nothing, Timeout)
Optional Timeout As Integer = Constants.DEFAULT_TIMEOUT) As Boolean End Using
Dim oTransaction As SqlTransaction = MaybeGetTransaction(SqlConnection, TransactionMode, Transaction) End Function
Public Function ExecuteNonQueryWithConnectionObject(pSqlCommand As String, pSqlConnection As SqlConnection,
Optional pTransactionMode As TransactionMode = TransactionMode.WithTransaction,
Optional pTransaction As SqlTransaction = Nothing,
Optional pTimeout As Integer = Constants.DEFAULT_TIMEOUT) As Boolean
Dim oSQLCommand As New SqlCommand(pSqlCommand)
Return ExecuteNonQueryWithConnectionObject(oSQLCommand, pSqlConnection, pTransactionMode, pTransaction, pTimeout)
End Function
Public Function ExecuteNonQueryWithConnectionObject(pSqlCommandObject As SqlCommand, pSqlConnection As SqlConnection,
Optional pTransactionMode As TransactionMode = TransactionMode.WithTransaction,
Optional pTransaction As SqlTransaction = Nothing,
Optional pTimeout As Integer = Constants.DEFAULT_TIMEOUT) As Boolean
Dim oTransaction As SqlTransaction = MaybeGetTransaction(pSqlConnection, pTransactionMode, pTransaction)
Try Try
Logger.Debug("ExecuteNonQueryWithConnectionObject: Running Command [{0}]", SqlCommand) Logger.Debug("ExecuteNonQueryWithConnectionObject: Running Command [{0}]", pSqlCommandObject.CommandText)
Using oSQLCOmmand = SqlConnection.CreateCommand() pSqlCommandObject.Connection = pSqlConnection
oSQLCOmmand.CommandText = SqlCommand pSqlCommandObject.Transaction = oTransaction
oSQLCOmmand.CommandTimeout = Timeout pSqlCommandObject.CommandTimeout = pTimeout
oSQLCOmmand.Transaction = oTransaction pSqlCommandObject.ExecuteNonQuery()
oSQLCOmmand.ExecuteNonQuery()
End Using
Return True Return True
Catch ex As Exception Catch ex As Exception
@ -391,96 +440,126 @@ Public Class MSSQLServer
Logger.Warn("ExecuteNonQueryWithConnectionObject: Error in ExecuteNonQueryWithConnectionObject while executing command: [{0}]-[{1}]", SqlCommand, SqlConnection.ConnectionString) Logger.Warn("ExecuteNonQueryWithConnectionObject: Error in ExecuteNonQueryWithConnectionObject while executing command: [{0}]-[{1}]", SqlCommand, SqlConnection.ConnectionString)
Return False Return False
Finally Finally
MaybeCommitTransaction(oTransaction, TransactionMode) MaybeCommitTransaction(oTransaction, pTransactionMode)
End Try End Try
End Function End Function
'<DebuggerStepThrough()> Public Function GetScalarValue(pSqlQuery As String) As Object Implements IDatabase.GetScalarValue
Public Function GetScalarValue(SQLQuery As String) As Object Implements IDatabase.GetScalarValue
Using oConnection As SqlConnection = GetSQLConnection() Using oConnection As SqlConnection = GetSQLConnection()
Return GetScalarValueWithConnectionObject(SQLQuery, oConnection) Return GetScalarValueWithConnectionObject(pSqlQuery, oConnection)
End Using End Using
End Function End Function
'<DebuggerStepThrough()> Public Function GetScalarValue(pSqlCommandObject As SqlCommand) As Object
Public Function GetScalarValue(SQLCommand As String, Timeout As Integer) As Object Implements IDatabase.GetScalarValue Using oConnection As SqlConnection = GetSQLConnection()
Return GetScalarValueWithConnectionObject(pSqlCommandObject, oConnection)
End Using
End Function
Public Function GetScalarValue(pSqlCommand As String, pTimeout As Integer) As Object Implements IDatabase.GetScalarValue
Using oConnection = GetSQLConnection() Using oConnection = GetSQLConnection()
Return GetScalarValueWithConnectionObject(SQLCommand, oConnection, TransactionMode.WithTransaction, Nothing, Timeout) Return GetScalarValueWithConnectionObject(pSqlCommand, oConnection, TransactionMode.WithTransaction, Nothing, pTimeout)
End Using End Using
End Function End Function
'<DebuggerStepThrough()> Public Function GetScalarValue(pSqlCommandObject As SqlCommand, pTimeout As Integer) As Object
Public Function GetScalarValue(SQLCommand As String, Transaction As SqlTransaction, Optional Timeout As Integer = Constants.DEFAULT_TIMEOUT) As Object
Using oConnection = GetSQLConnection() Using oConnection = GetSQLConnection()
Return GetScalarValueWithConnectionObject(SQLCommand, oConnection, TransactionMode.ExternalTransaction, Transaction, Timeout) Return GetScalarValueWithConnectionObject(pSqlCommandObject, oConnection, TransactionMode.WithTransaction, Nothing, pTimeout)
End Using End Using
End Function End Function
'<DebuggerStepThrough()> Public Function GetScalarValue(pSQLCommand As String, pTransaction As SqlTransaction, Optional pTimeout As Integer = Constants.DEFAULT_TIMEOUT) As Object
Public Async Function GetScalarValueAsync(SQLQuery As String, Optional Timeout As Integer = Constants.DEFAULT_TIMEOUT) As Task(Of Object) Using oConnection = GetSQLConnection()
Return Await Task.Run(Function() GetScalarValue(SQLQuery, Timeout)) Return GetScalarValueWithConnectionObject(pSQLCommand, oConnection, TransactionMode.ExternalTransaction, pTransaction, pTimeout)
End Using
End Function End Function
'<DebuggerStepThrough()> Public Function GetScalarValue(pSQLCommandObject As SqlCommand, pTransaction As SqlTransaction, Optional pTimeout As Integer = Constants.DEFAULT_TIMEOUT) As Object
Public Function GetScalarValueWithConnection(SQLCommand As String, pConnectionString As String, Optional Timeout As Integer = Constants.DEFAULT_TIMEOUT) As Object Using oConnection = GetSQLConnection()
Return GetScalarValueWithConnectionObject(pSQLCommandObject, oConnection, TransactionMode.ExternalTransaction, pTransaction, pTimeout)
End Using
End Function
Public Async Function GetScalarValueAsync(pSQLCommand As String, Optional pTimeout As Integer = Constants.DEFAULT_TIMEOUT) As Task(Of Object)
Return Await Task.Run(Function() GetScalarValue(pSQLCommand, pTimeout))
End Function
Public Async Function GetScalarValueAsync(pSQLCommandObject As SqlCommand, Optional pTimeout As Integer = Constants.DEFAULT_TIMEOUT) As Task(Of Object)
Return Await Task.Run(Function() GetScalarValue(pSQLCommandObject, pTimeout))
End Function
Public Function GetScalarValueWithConnection(pSQLCommand As String, pConnectionString As String, Optional pTimeout As Integer = Constants.DEFAULT_TIMEOUT) As Object
Using oConnection = GetConnection(pConnectionString) Using oConnection = GetConnection(pConnectionString)
Return GetScalarValueWithConnectionObject(SQLCommand, oConnection, TransactionMode.WithTransaction, Nothing, Timeout) Return GetScalarValueWithConnectionObject(pSQLCommand, oConnection, TransactionMode.WithTransaction, Nothing, pTimeout)
End Using End Using
End Function End Function
Public Function GetScalarValueWithConnectionObject(SqlCommand As String, SqlConnection As SqlConnection, Public Function GetScalarValueWithConnection(pSqlCommandObject As SqlCommand, pConnectionString As String, Optional pTimeout As Integer = Constants.DEFAULT_TIMEOUT) As Object
Optional TransactionMode As TransactionMode = TransactionMode.WithTransaction, Using oConnection = GetConnection(pConnectionString)
Optional Transaction As SqlTransaction = Nothing, Return GetScalarValueWithConnectionObject(pSqlCommandObject, oConnection, TransactionMode.WithTransaction, Nothing, pTimeout)
Optional Timeout As Integer = Constants.DEFAULT_TIMEOUT) As Object End Using
End Function
Dim oTransaction As SqlTransaction = MaybeGetTransaction(SqlConnection, TransactionMode, Transaction) Public Function GetScalarValueWithConnectionObject(pSqlCommand As String, pSqlConnection As SqlConnection,
Optional pTransactionMode As TransactionMode = TransactionMode.WithTransaction,
Optional pTransaction As SqlTransaction = Nothing,
Optional pTimeout As Integer = Constants.DEFAULT_TIMEOUT) As Object
Dim oSQLCommand As New SqlCommand(pSqlCommand)
Return GetScalarValueWithConnectionObject(oSQLCommand, pSqlConnection, pTransactionMode, pTransaction, pTimeout)
End Function
Public Function GetScalarValueWithConnectionObject(pSqlCommandObject As SqlCommand, pSqlConnection As SqlConnection,
Optional pTransactionMode As TransactionMode = TransactionMode.WithTransaction,
Optional pTransaction As SqlTransaction = Nothing,
Optional pTimeout As Integer = Constants.DEFAULT_TIMEOUT) As Object
Dim oTransaction As SqlTransaction = MaybeGetTransaction(pSqlConnection, pTransactionMode, pTransaction)
Dim oResult As Object = Nothing Dim oResult As Object = Nothing
Try Try
Using oSQLCOmmand = SqlConnection.CreateCommand() pSqlCommandObject.Connection = pSqlConnection
oSQLCOmmand.CommandText = SqlCommand pSqlCommandObject.CommandTimeout = pTimeout
oSQLCOmmand.CommandTimeout = Timeout pSqlCommandObject.Transaction = oTransaction
oSQLCOmmand.Transaction = oTransaction oResult = pSqlCommandObject.ExecuteScalar()
oResult = oSQLCOmmand.ExecuteScalar()
End Using
Catch ex As Exception Catch ex As Exception
Logger.Error(ex) Logger.Error(ex)
Logger.Warn("GetDatatableWithConnectionObject: Error in GetDatatableWithConnection while executing command: [{0}]", SqlCommand) Logger.Warn("GetDatatableWithConnectionObject: Error in GetDatatableWithConnection while executing command: [{0}]", pSqlCommandObject)
Finally Finally
MaybeCommitTransaction(oTransaction, TransactionMode) MaybeCommitTransaction(oTransaction, pTransactionMode)
End Try End Try
Return oResult Return oResult
End Function End Function
Public Function GetScalarValue(SQLCommand As SqlCommand, OutputParameter As String, Timeout As Integer) As Object Public Function GetScalarValue(pSqlCommand As SqlCommand, pOutputParameter As String, Optional pTimeout As Integer = Constants.DEFAULT_TIMEOUT) As Object
Try Try
If TestCanConnect() = False Then If TestCanConnect() = False Then
Return Nothing Return Nothing
End If End If
Logger.Debug("GetScalarValue: Running Query [{0}]", SQLCommand) Logger.Debug("GetScalarValue: Running Query [{0}]", pSqlCommand)
If SQLCommand.CommandText.Contains(" ") Then If pSqlCommand.CommandText.Contains(" ") Then
SQLCommand.CommandType = CommandType.Text pSqlCommand.CommandType = CommandType.Text
Else Else
SQLCommand.CommandType = CommandType.StoredProcedure pSqlCommand.CommandType = CommandType.StoredProcedure
End If End If
Using oConnection As SqlConnection = GetSQLConnection() Using oConnection As SqlConnection = GetSQLConnection()
SQLCommand.Connection = oConnection pSqlCommand.Connection = oConnection
SQLCommand.Parameters(OutputParameter).Direction = ParameterDirection.Output pSqlCommand.Parameters(pOutputParameter).Direction = ParameterDirection.Output
SQLCommand.CommandTimeout = Timeout pSqlCommand.CommandTimeout = pTimeout
SQLCommand.ExecuteNonQuery() pSqlCommand.ExecuteNonQuery()
oConnection.Close() oConnection.Close()
Return SQLCommand.Parameters(OutputParameter).Value Return pSqlCommand.Parameters(pOutputParameter).Value
End Using End Using
Catch ex As Exception Catch ex As Exception
Logger.Error(ex) Logger.Error(ex)
Logger.Warn($"GetScalarValue failed SQLCommand [{SQLCommand}]") Logger.Warn($"GetScalarValue failed SQLCommand [{pSqlCommand}]")
Return Nothing Return Nothing
End Try End Try
@ -517,7 +596,6 @@ Public Class MSSQLServer
End Try End Try
End Sub End Sub
'<DebuggerStepThrough()>
Private Sub NewExecuteNonQueryAsync_Callback(ByVal result As IAsyncResult) Private Sub NewExecuteNonQueryAsync_Callback(ByVal result As IAsyncResult)
Dim command As SqlCommand = CType(result.AsyncState, SqlCommand) Dim command As SqlCommand = CType(result.AsyncState, SqlCommand)
Dim res = command.EndExecuteNonQuery(result) Dim res = command.EndExecuteNonQuery(result)