2015-11-02 13:54:12 +01:00

175 lines
6.3 KiB
VB.net

Imports System.Data.SqlClient
Imports NLog
Public Class DB
Private _connstring
Private _db
Private _logger As Logger
Public FormId
Public ControlId
Public RecordId
Public Username As String = "BrainpoolImporter"
Public Sub New(connectionString As String, dbname As String)
_logger = LogManager.GetLogger("DB")
_connstring = connectionString
_db = dbname
End Sub
#Region "=== HELPERS ==="
Public Function formatTable(table As String) As String
Return String.Format("[{0}].[dbo].[{1}]", _db, table)
End Function
Public Function GetFormId() As Integer
Dim sql = String.Format("SELECT GUID FROM {0} WHERE NAME = '{1}'", Me.formatTable("TBPMO_FORM"), "Marken")
Return Me.Scalar(sql)
End Function
Public Function GetControlId(formId As Integer, Optional name As String = "ApplicationNumber") As Integer
Dim sql = String.Format("SELECT GUID FROM {0} WHERE NAME = '{1}' AND FORM_ID = {2}", Me.formatTable("TBPMO_CONTROL"), name, formId)
Return Me.Scalar(sql)
End Function
Public Function GetProperty(m As Mark, propertyName As String) As Object
_logger.Debug("Reading property: {0}, Mark? {1}", propertyName, IsNothing(m))
Dim value = CallByName(m, propertyName, CallType.Get)
If (value = Nothing) Then
value = DBNull.Value
End If
Return value
End Function
Public Function IsEqual(controlId As Integer, recordId As Integer, valueToCompare As Object)
Dim table = Me.formatTable("TBPMO_CONTROL_VALUE")
Dim sql = String.Format("SELECT VALUE FROM {0} WHERE CONTROL_ID = {1} AND RECORD_ID = {2}", table, controlId, recordId)
Dim value = Me.Scalar(sql)
If (IsDBNull(valueToCompare) Xor IsDBNull(value)) Then
Return False
End If
Return value = valueToCompare
End Function
#End Region
#Region "=== RECORD ID ==="
Public Function GetRecordId(controlId As Integer, applicationNumber As String) As Integer
Dim sql = String.Format("SELECT RECORD_ID FROM {0} WHERE CONTROL_ID = {1} AND VALUE = '{2}'", Me.formatTable("TBPMO_CONTROL_VALUE"), controlId, applicationNumber)
Return Me.Scalar(sql)
End Function
Public Function InsertRecord(formId As Integer)
Dim sql = String.Format("INSERT INTO {0} (FORM_ID, ADDED_WHO) VALUES ({1}, '{2}')", Me.formatTable("TBPMO_RECORD"), formId, Username)
Me.NonQuery(sql)
Return Me.Scalar("SELECT MAX(GUID) FROM TBPMO_RECORD")
End Function
#End Region
#Region "=== VALUES ==="
Public Function InsertValue(controlId As Integer, recordId As Integer, value As Object)
Dim table = Me.formatTable("TBPMO_CONTROL_VALUE")
Dim sql = String.Format("INSERT INTO {0} (CONTROL_ID, RECORD_ID, VALUE) VALUES ({1}, {2}, '{3}')", table, controlId, recordId, value)
Me.NonQuery(sql)
Return Me.Scalar(String.Format("SELECT MAX(GUID) FROM {0} WHERE CONTROL_ID = {1}", table, controlId))
End Function
Public Sub UpdateValue(controlId As Integer, recordId As Integer, value As Object)
Dim table = Me.formatTable("TBPMO_CONTROL_VALUE")
Dim sql = String.Format("UPDATE {0} SET VALUE = '{1}' WHERE CONTROL_ID = {2} AND RECORD_ID = {3}", table, value, controlId, recordId)
Me.NonQuery(sql)
End Sub
#End Region
#Region "=== DATABASE ==="
Public Function Scalar(queryString As String)
Dim conn As New SqlConnection(_connstring)
Dim cmd As New SqlCommand(queryString, conn)
Dim result
Try
conn.Open()
result = cmd.ExecuteScalar()
conn.Dispose()
conn.Close()
Return result
Catch ex As Exception
Throw New Exception(String.Format("Error while executing SQL Scalar-Query ({0}): {1}", queryString, ex.Message))
End Try
End Function
Public Function NonQuery(queryString As String)
Dim conn As New SqlConnection(_connstring)
Dim cmd As New SqlCommand(queryString, conn)
Try
conn.Open()
cmd.ExecuteNonQuery()
conn.Dispose()
conn.Close()
Return True
Catch ex As Exception
Throw New Exception(String.Format("Error while executing SQL Non-Query ({0}): {1}", queryString, ex.Message))
End Try
End Function
Public Function QueryTable(queryString As String) As DataTable
Try
Dim conn As New SqlConnection(_connstring)
Dim cmd As New SqlCommand(queryString, conn)
Dim adapter As New SqlDataAdapter(cmd)
Dim dt As New DataTable()
conn.Open()
adapter.Fill(dt)
conn.Dispose()
conn.Close()
Return dt
Catch ex As Exception
Throw New Exception(String.Format("Error while executing SQL Query ({0}): {1}", queryString, ex.Message))
End Try
End Function
#End Region
#Region "=== IMAGES ==="
Public Sub InsertImage(bimage As Byte(), ControlId As Integer, RecordId As Integer)
Dim table = Me.formatTable("TBPMO_CONTROL_IMAGE")
Dim sql = String.Format("INSERT INTO {0} (CONTROL_ID, RECORD_ID, IMG) VALUES (@CONTROL_ID, @RECORD_ID, @IMG)", table)
Dim conn As New SqlClient.SqlConnection(_connstring)
Dim cmd As New SqlClient.SqlCommand(sql, conn)
cmd.Parameters.Add("@IMG", SqlDbType.Binary).Value = bimage
cmd.Parameters.Add("@CONTROL_ID", SqlDbType.Int).Value = ControlId
cmd.Parameters.Add("@RECORD_ID", SqlDbType.Int).Value = RecordId
conn.Open()
cmd.ExecuteNonQuery()
conn.Close()
End Sub
Public Sub UpdateImage(bimage As Byte(), ControlId As Integer, RecordId As Integer)
Dim table = Me.formatTable("TBPMO_CONTROL_IMAGE")
Dim sql = String.Format("UPDATE {0} SET IMG = @IMG WHERE CONTROL_ID = @CONTROL_ID AND RECORD_ID = @RECORD_ID", table)
Dim conn As New SqlClient.SqlConnection(_connstring)
Dim cmd As New SqlClient.SqlCommand(sql, conn)
cmd.Parameters.Add("@IMG", SqlDbType.Binary).Value = bimage
cmd.Parameters.Add("@CONTROL_ID", SqlDbType.Int).Value = ControlId
cmd.Parameters.Add("@RECORD_ID", SqlDbType.Int).Value = RecordId
conn.Open()
cmd.ExecuteNonQuery()
conn.Close()
End Sub
#End Region
End Class