diff --git a/Modules.Base/Base/Base.vbproj b/Modules.Base/Base/Base.vbproj
index 891fb7be..3272f3ad 100644
--- a/Modules.Base/Base/Base.vbproj
+++ b/Modules.Base/Base/Base.vbproj
@@ -65,7 +65,8 @@
-
+
+
True
diff --git a/Modules.Base/Base/Database/Enums.vb b/Modules.Base/Base/Database/Enums.vb
new file mode 100644
index 00000000..3e0cbe6b
--- /dev/null
+++ b/Modules.Base/Base/Database/Enums.vb
@@ -0,0 +1,8 @@
+Namespace Database
+ Module Enums
+ Public Enum NamedDatabase
+ ECM
+ IDB
+ End Enum
+ End Module
+End Namespace
diff --git a/Modules.Base/Base/IDB/Database.vb b/Modules.Base/Base/IDB/Database.vb
new file mode 100644
index 00000000..f86b7186
--- /dev/null
+++ b/Modules.Base/Base/IDB/Database.vb
@@ -0,0 +1,15 @@
+
+Namespace IDB
+ '''
+ ''' This module is intended for often used constants and datastructures
+ ''' Therefor it is important that this module does not have any dependencies on other modules!!
+ '''
+ Module Constants
+ Public Const OBJECT_STATE_FILE_ADDED = "File added"
+ Public Const OBJECT_STATE_FILE_VERSIONED = "File versioned"
+ Public Const OBJECT_STATE_FILE_CHANGED = "File changed"
+ Public Const OBJECT_STATE_FILE_DELETED = "File deleted"
+ Public Const OBJECT_STATE_METADATA_CHANGED = "Metadata changed"
+ Public Const OBJECT_STATE_ATTRIBUTEVALUE_DELETED = "Attributevalue deleted"
+ End Module
+End Namespace
diff --git a/Modules.Base/Base/NamedDatabase.vb b/Modules.Base/Base/NamedDatabase.vb
deleted file mode 100644
index 011c88c7..00000000
--- a/Modules.Base/Base/NamedDatabase.vb
+++ /dev/null
@@ -1,10 +0,0 @@
-'''
-''' This module is intended for often used constants and datastructures
-''' Therefor it is important that this module does not have any dependencies on other modules!!
-'''
-Namespace Constants
- Public Enum NamedDatabase
- ECM
- IDB
- End Enum
-End Namespace
diff --git a/Modules.Database/Adapters/MSSQLServer.vb b/Modules.Database/Adapters/MSSQLServer.vb
index 4beb217c..e8bd14d5 100644
--- a/Modules.Database/Adapters/MSSQLServer.vb
+++ b/Modules.Database/Adapters/MSSQLServer.vb
@@ -278,7 +278,7 @@ Public Class MSSQLServer
End Try
End Function
-
+ '
Public Function GetDatatable(SqlCommand As String) As DataTable Implements IDatabase.GetDatatable
Return GetDatatable(SqlCommand, _Timeout)
End Function
@@ -294,19 +294,19 @@ Public Class MSSQLServer
End Using
End Function
-
+ '
Public Function GetDatatable(SqlCommand As String, Transaction As SqlTransaction, Optional Timeout As Integer = 120) As DataTable
Using oSqlConnection = GetSQLConnection()
Return GetDatatableWithConnectionObject(SqlCommand, oSqlConnection, TransactionMode.ExternalTransaction, Transaction, Timeout)
End Using
End Function
-
+ '
Public Async Function GetDatatableAsync(SqlCommand As String, Optional Timeout As Integer = 120) As Task(Of DataTable)
Return Await Task.Run(Function() GetDatatable(SqlCommand, Timeout))
End Function
-
+ '
Public Function GetDatatableWithConnection(SqlCommand As String, ConnectionString As String, Optional Timeout As Integer = 120) As DataTable
Using oConnection = GetConnection(ConnectionString)
Return GetDatatableWithConnectionObject(SqlCommand, oConnection, Timeout:=Timeout)
@@ -342,33 +342,33 @@ Public Class MSSQLServer
Return oTable
End Function
-
+ '
Public Function ExecuteNonQuery(SQLCommand As String) As Boolean Implements IDatabase.ExecuteNonQuery
Using oConnection = GetSQLConnection()
Return ExecuteNonQueryWithConnectionObject(SQLCommand, oConnection, TransactionMode.WithTransaction, Nothing, _Timeout)
End Using
End Function
-
+ '
Public Function ExecuteNonQuery(SQLCommand As String, Timeout As Integer) As Boolean Implements IDatabase.ExecuteNonQuery
Using oConnection = GetSQLConnection()
Return ExecuteNonQueryWithConnectionObject(SQLCommand, oConnection, TransactionMode.WithTransaction, Nothing, Timeout)
End Using
End Function
-
+ '
Public Function ExecuteNonQuery(SQLCommand As String, Transaction As SqlTransaction, Optional Timeout As Integer = 120) As Boolean
Using oConnection = GetSQLConnection()
Return ExecuteNonQueryWithConnectionObject(SQLCommand, Transaction.Connection, TransactionMode.ExternalTransaction, Transaction, Timeout)
End Using
End Function
-
+ '
Public Async Function ExecuteNonQueryAsync(SQLCommand As String, Optional Timeout As Integer = 120) As Task(Of Boolean)
Return Await Task.Run(Function() ExecuteNonQuery(SQLCommand, Timeout))
End Function
-
+ '
Public Function ExecuteNonQueryWithConnection(pSQLCommand As String, ConnString As String, Optional Timeout As Integer = 120) As Boolean
Using oConnection = GetConnection(ConnString)
Return ExecuteNonQueryWithConnectionObject(pSQLCommand, oConnection, TransactionMode.WithTransaction, Nothing, Timeout)
@@ -399,33 +399,33 @@ Public Class MSSQLServer
End Try
End Function
-
+ '
Public Function GetScalarValue(SQLQuery As String) As Object Implements IDatabase.GetScalarValue
Using oConnection As SqlConnection = GetSQLConnection()
Return GetScalarValueWithConnectionObject(SQLQuery, oConnection)
End Using
End Function
-
+ '
Public Function GetScalarValue(SQLCommand As String, Timeout As Integer) As Object Implements IDatabase.GetScalarValue
Using oConnection = GetSQLConnection()
Return GetScalarValueWithConnectionObject(SQLCommand, oConnection, TransactionMode.WithTransaction, Nothing, Timeout)
End Using
End Function
-
+ '
Public Function GetScalarValue(SQLCommand As String, Transaction As SqlTransaction, Optional Timeout As Integer = 120) As Object
Using oConnection = GetSQLConnection()
Return GetScalarValueWithConnectionObject(SQLCommand, oConnection, TransactionMode.ExternalTransaction, Transaction, Timeout)
End Using
End Function
-
+ '
Public Async Function GetScalarValueAsync(SQLQuery As String, Optional Timeout As Integer = 120) As Task(Of Object)
Return Await Task.Run(Function() GetScalarValue(SQLQuery, Timeout))
End Function
-
+ '
Public Function GetScalarValueWithConnection(SQLCommand As String, ConnectionString As String, Optional Timeout As Integer = 120) As Object
Using oConnection = GetConnection(ConnectionString)
Return GetScalarValueWithConnectionObject(SQLCommand, oConnection, TransactionMode.WithTransaction, Nothing, Timeout)
@@ -490,7 +490,7 @@ Public Class MSSQLServer
End Try
End Function
-
+ '
Public Function GetScalarValue(SQLCommand As SqlCommand, OutputParameter As String) As Object
Return GetScalarValue(SQLCommand, OutputParameter, _Timeout)
End Function
@@ -521,7 +521,7 @@ Public Class MSSQLServer
End Try
End Sub
-
+ '
Private Sub NewExecuteNonQueryAsync_Callback(ByVal result As IAsyncResult)
Dim command As SqlCommand = CType(result.AsyncState, SqlCommand)
Dim res = command.EndExecuteNonQuery(result)
diff --git a/Modules.Filesystem/File.vb b/Modules.Filesystem/File.vb
index 7425e2d3..1c109f8f 100644
--- a/Modules.Filesystem/File.vb
+++ b/Modules.Filesystem/File.vb
@@ -75,6 +75,11 @@ Public Class File
Return oCleanName
End Function
+ '''
+ ''' Reads the file at `FilePath` and computes a SHA256 Hash from its contents
+ '''
+ '''
+ '''
Public Function GetChecksum(FilePath As String) As String
Try
Using oFileStream = IO.File.OpenRead(FilePath)
@@ -339,6 +344,24 @@ Public Class File
End Try
End Function
+ '''
+ ''' Checks if a file is locked, ie. in use by another process.
+ '''
+ '''
+ ''' https://docs.microsoft.com/en-us/dotnet/standard/io/handling-io-errors
+ '''
+ Public Function TestFileIsLocked(pFilePath As String) As Boolean
+ Try
+ Using stream As FileStream = IO.File.Open(FileMode.Open, FileAccess.Read, FileShare.None)
+ stream.Close()
+ End Using
+ Catch ex As Exception When ((ex.HResult And &HFFFF) = 32)
+ Return True
+ End Try
+
+ Return False
+ End Function
+
Public Function TestPathIsDirectory(Path As String) As Boolean
If Not Directory.Exists(Path) Then
Return False