WIP: Database with sql connection object

This commit is contained in:
Jonathan Jenne 2022-11-02 09:01:42 +01:00
parent 4b098622d2
commit 95a0e578da
5 changed files with 58 additions and 38 deletions

View File

@ -264,78 +264,86 @@ Public Class MSSQLServer
End Try End Try
End Function End Function
'<DebuggerStepThrough()> ''' <summary>
Public Function GetDatatable(SqlCommand As String) As DataTable Implements IDatabase.GetDatatable ''' Returns a Datatable for a SQL Statement
Return GetDatatable(SqlCommand, QueryTimeout) ''' </summary>
''' <param name="pSqlCommand">SQL Command Text for Datatable (select XYZ from TableORView)</param>
''' <returns>A datatable</returns>
Public Function GetDatatable(pSqlCommand As String, Optional pTimeout As Integer = Constants.DEFAULT_TIMEOUT) As DataTable Implements IDatabase.GetDatatable
Using oSqlConnection = GetSQLConnection()
Return GetDatatableWithConnectionObject(pSqlCommand, oSqlConnection, TransactionMode.WithTransaction, Nothing, pTimeout)
End Using
End Function End Function
''' <summary> ''' <summary>
''' Returns a datatable for a sql-statement ''' Returns a datatable for a SQL Statement
''' </summary> ''' </summary>
''' <param name="SqlCommand">sqlcommand for datatable (select XYZ from TableORView)</param> ''' <param name="pSqlCommandObject">SQL Command Object for Datatable (select XYZ from TableORView)</param>
''' <returns>Returns a datatable</returns> ''' <returns>A datatable</returns>
Public Function GetDatatable(SqlCommand As String, Timeout As Integer) As DataTable Implements IDatabase.GetDatatable Public Function GetDatatable(pSqlCommandObject As SqlCommand, Optional pTimeout As Integer = Constants.DEFAULT_TIMEOUT) As DataTable Implements IDatabase.GetDatatable
Using oSqlConnection = GetSQLConnection() Using oSqlConnection = GetSQLConnection()
Return GetDatatableWithConnectionObject(SqlCommand, oSqlConnection, TransactionMode.WithTransaction, Nothing, Timeout) Return GetDatatableWithConnectionObject(pSqlCommandObject, oSqlConnection, TransactionMode.WithTransaction, Nothing, pTimeout)
End Using End Using
End Function End Function
'<DebuggerStepThrough()> Public Function GetDatatable(pSqlCommand As String, pTransaction As SqlTransaction, Optional pTimeout As Integer = Constants.DEFAULT_TIMEOUT) As DataTable
Public Function GetDatatable(SqlCommand As String, Transaction As SqlTransaction, Optional Timeout As Integer = Constants.DEFAULT_TIMEOUT) As DataTable
Using oSqlConnection = GetSQLConnection() Using oSqlConnection = GetSQLConnection()
Return GetDatatableWithConnectionObject(SqlCommand, oSqlConnection, TransactionMode.ExternalTransaction, Transaction, Timeout) Return GetDatatableWithConnectionObject(pSqlCommand, oSqlConnection, TransactionMode.ExternalTransaction, pTransaction, pTimeout)
End Using End Using
End Function End Function
'<DebuggerStepThrough()> Public Async Function GetDatatableAsync(pSqlCommand As String, Optional pTimeout As Integer = Constants.DEFAULT_TIMEOUT) As Task(Of DataTable)
Public Async Function GetDatatableAsync(SqlCommand As String, Optional Timeout As Integer = Constants.DEFAULT_TIMEOUT) As Task(Of DataTable) Return Await Task.Run(Function() GetDatatable(pSqlCommand, pTimeout))
Return Await Task.Run(Function() GetDatatable(SqlCommand, Timeout))
End Function End Function
'<DebuggerStepThrough()> Public Function GetDatatableWithConnection(pSqlCommand As String, pConnectionString As String, Optional Timeout As Integer = Constants.DEFAULT_TIMEOUT) As DataTable
Public Function GetDatatableWithConnection(SqlCommand As String, pConnectionString As String, Optional Timeout As Integer = Constants.DEFAULT_TIMEOUT) As DataTable
Using oConnection = GetConnection(pConnectionString) Using oConnection = GetConnection(pConnectionString)
Return GetDatatableWithConnectionObject(SqlCommand, oConnection, Timeout:=Timeout) Return GetDatatableWithConnectionObject(pSqlCommand, oConnection, pTimeout:=Timeout)
End Using End Using
End Function End Function
Public Function GetDatatableWithConnectionObject(SqlCommand As String, SqlConnection As SqlConnection, Public Function GetDatatableWithConnectionObject(pSqlCommand As String, pSqlConnection As SqlConnection,
Optional TransactionMode As TransactionMode = TransactionMode.WithTransaction, Optional pTransactionMode As TransactionMode = TransactionMode.WithTransaction,
Optional Transaction As SqlTransaction = Nothing, Optional pTransaction As SqlTransaction = Nothing,
Optional Timeout As Integer = Constants.DEFAULT_TIMEOUT) As DataTable Optional pTimeout As Integer = Constants.DEFAULT_TIMEOUT) As DataTable
Dim oTransaction As SqlTransaction = MaybeGetTransaction(SqlConnection, TransactionMode, Transaction) Dim oSQLCommand As New SqlCommand(pSqlCommand)
Return GetDatatableWithConnectionObject(oSQLCommand, pSqlConnection, pTransactionMode, pTransaction, pTimeout)
End Function
Public Function GetDatatableWithConnectionObject(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 DataTable
Dim oTransaction As SqlTransaction = MaybeGetTransaction(pSqlConnection, pTransactionMode, pTransaction)
Dim oTable As New DataTable() With {.TableName = Constants.DEFAULT_TABLE} Dim oTable As New DataTable() With {.TableName = Constants.DEFAULT_TABLE}
Try Try
Dim oAdapter As New SqlDataAdapter(New SqlCommand With { pSqlCommandObject.Connection = pSqlConnection
.CommandText = SqlCommand, pSqlCommandObject.Transaction = oTransaction
.Connection = SqlConnection, pSqlCommandObject.CommandTimeout = pTimeout
.Transaction = oTransaction,
.CommandTimeout = Timeout
})
Logger.Debug("GetDatatableWithConnectionObject: Running Query [{0}]", SqlCommand) Using oAdapter As New SqlDataAdapter(pSqlCommandObject)
Logger.Debug("GetDatatableWithConnectionObject: Running Query [{0}]", pSqlCommandObject.CommandText)
oAdapter.Fill(oTable)
End Using
oAdapter.Fill(oTable)
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)
Throw ex Throw ex
Finally Finally
MaybeCommitTransaction(oTransaction, TransactionMode) MaybeCommitTransaction(oTransaction, pTransactionMode)
End Try End Try
Return oTable Return oTable
End Function End Function
'<DebuggerStepThrough()>
Public Function ExecuteNonQuery(SQLCommand As String) As Boolean Implements IDatabase.ExecuteNonQuery Public Function ExecuteNonQuery(SQLCommand As String) As Boolean Implements IDatabase.ExecuteNonQuery
Using oConnection = GetSQLConnection() Using oConnection = GetSQLConnection()
Return ExecuteNonQueryWithConnectionObject(SQLCommand, oConnection, TransactionMode.WithTransaction, Nothing, QueryTimeout) Return ExecuteNonQueryWithConnectionObject(SQLCommand, oConnection, TransactionMode.WithTransaction, Nothing, QueryTimeout)
End Using End Using
End Function End Function
'<DebuggerStepThrough()>
Public Function ExecuteNonQuery(SQLCommand As String, Timeout As Integer) As Boolean Implements IDatabase.ExecuteNonQuery Public Function ExecuteNonQuery(SQLCommand As String, Timeout As Integer) As Boolean Implements IDatabase.ExecuteNonQuery
Using oConnection = GetSQLConnection() Using oConnection = GetSQLConnection()
Return ExecuteNonQueryWithConnectionObject(SQLCommand, oConnection, TransactionMode.WithTransaction, Nothing, Timeout) Return ExecuteNonQueryWithConnectionObject(SQLCommand, oConnection, TransactionMode.WithTransaction, Nothing, Timeout)

View File

@ -99,6 +99,7 @@
<Compile Include="Dispatcher.vb" /> <Compile Include="Dispatcher.vb" />
<Compile Include="Exceptions.vb" /> <Compile Include="Exceptions.vb" />
<Compile Include="Adapters\Firebird.vb" /> <Compile Include="Adapters\Firebird.vb" />
<Compile Include="Helpers.vb" />
<Compile Include="IDatabase.vb" /> <Compile Include="IDatabase.vb" />
<Compile Include="Adapters\ODBC.vb" /> <Compile Include="Adapters\ODBC.vb" />
<Compile Include="Adapters\Oracle.vb" /> <Compile Include="Adapters\Oracle.vb" />

10
Database/Helpers.vb Normal file
View File

@ -0,0 +1,10 @@
Public Class Helpers
Public Shared Function MaybeEscapeSQLCommand(pSQLCommand As String) As String
End Function
End Class

View File

@ -1,4 +1,5 @@
Imports System.Data.Common Imports System.Data.Common
Imports System.Data.SqlClient
Public Interface IDatabase Public Interface IDatabase
''' <summary> ''' <summary>
@ -7,8 +8,8 @@ Public Interface IDatabase
Property DBInitialized As Boolean Property DBInitialized As Boolean
Property CurrentConnectionString As String Property CurrentConnectionString As String
Function GetDatatable(SqlCommand As String, Timeout As Integer) As DataTable Function GetDatatable(SqlCommand As String, Optional Timeout As Integer = Constants.DEFAULT_TIMEOUT) As DataTable
Function GetDatatable(SqlCommand As String) As DataTable Function GetDatatable(SqlCommand As SqlCommand, Optional Timeout As Integer = Constants.DEFAULT_TIMEOUT) As DataTable
Function ExecuteNonQuery(SQLCommand As String, Timeout As Integer) As Boolean Function ExecuteNonQuery(SQLCommand As String, Timeout As Integer) As Boolean
Function ExecuteNonQuery(SQLCommand As String) As Boolean Function ExecuteNonQuery(SQLCommand As String) As Boolean

View File

@ -3,8 +3,8 @@
Public Class Environment Public Class Environment
Public Property User As New State.UserState Public Property User As New State.UserState
Public Property Settings As New State.SettingsState Public Property Settings As New State.SettingsState
Public Property Service As State.ServiceState Public Property Service As New State.ServiceState
Public Property Database As MSSQLServer Public Property Database As MSSQLServer
Public Property DatabaseIDB As MSSQLServer Public Property DatabaseIDB As MSSQLServer
Public Property Modules As Dictionary(Of String, State.ModuleState) Public Property Modules As New Dictionary(Of String, State.ModuleState)
End Class End Class