|
| 1 | +Imports System.Data.Common |
| 2 | +Imports System.Threading |
| 3 | + |
| 4 | +Partial Public MustInherit Class Connection |
| 5 | + ''' <summary> |
| 6 | + ''' Register any connection string for databasic models and queries which doesn't exist in application config file. |
| 7 | + ''' </summary> |
| 8 | + ''' <param name="name">Connection string unique name, the same name used in your model classes in Databasic.Connection("name") class attribute.</param> |
| 9 | + ''' <param name="connectionString">DSN connection string value.</param> |
| 10 | + ''' <param name="providerName">Database provider supported by databasic library.</param> |
| 11 | + ''' <param name="overwriteExisting">Overwrite already existing connection string under given name in databasic config values internal register.</param> |
| 12 | + Public Shared Sub RegisterConfigRecord( |
| 13 | + name As String, |
| 14 | + connectionString As String, |
| 15 | + providerName As String, |
| 16 | + Optional overwriteExisting As Boolean = False |
| 17 | + ) |
| 18 | + Connection._registerConfigRecord(name, connectionString, providerName, overwriteExisting) |
| 19 | + End Sub |
| 20 | + ''' <summary> |
| 21 | + ''' Register any connection string for databasic models and queries which doesn't exist in application config file. |
| 22 | + ''' </summary> |
| 23 | + ''' <param name="name">Connection string unique name, the same name used in your model classes in Databasic.Connection("name") class attribute.</param> |
| 24 | + ''' <param name="connectionString">DSN connection string value.</param> |
| 25 | + ''' <param name="providerName">Database provider supported by databasic library.</param> |
| 26 | + ''' <param name="overwriteExisting">Overwrite already existing connection string under given name in databasic config values internal register.</param> |
| 27 | + Public Shared Sub RegisterConfigRecord( |
| 28 | + name As String, |
| 29 | + connectionString As String, |
| 30 | + providerName As ProviderName, |
| 31 | + Optional overwriteExisting As Boolean = False |
| 32 | + ) |
| 33 | + Connection._registerConfigRecord(name, connectionString, providerName, overwriteExisting) |
| 34 | + End Sub |
| 35 | + Private Shared Sub _registerConfigRecord( |
| 36 | + name As String, |
| 37 | + connectionString As String, |
| 38 | + providerName As String, |
| 39 | + Optional overwriteExisting As Boolean = False |
| 40 | + ) |
| 41 | + Dim throwException As Boolean = False |
| 42 | + Dim connectionIndex As Int32 |
| 43 | + Connection._staticInitDoneLock.EnterWriteLock() |
| 44 | + Dim nameExists As Boolean = Databasic.Connection.NamesAndIndexes.ContainsKey(name) |
| 45 | + If ( |
| 46 | + Not nameExists Or (nameExists And overwriteExisting) |
| 47 | + ) Then |
| 48 | + If nameExists Then |
| 49 | + connectionIndex = Databasic.Connection.NamesAndIndexes(name) |
| 50 | + Else |
| 51 | + If Not ProviderNames.Values.ContainsValue(providerName) Then |
| 52 | + Throw New Exception( |
| 53 | + $"Provider name not supported by Databasic: '{providerName}'. " + |
| 54 | + "Check if you are using any supported provider from this list: '" + |
| 55 | + String.Join("', '", ProviderNames.Values.Values.ToArray()) + "'." |
| 56 | + ) |
| 57 | + End If |
| 58 | + connectionIndex = Databasic.Connection.NamesAndIndexes.Count |
| 59 | + Databasic.Connection.Config.Add( |
| 60 | + connectionIndex, New String() { |
| 61 | + providerName, connectionString |
| 62 | + } |
| 63 | + ) |
| 64 | + Databasic.Connection.NamesAndIndexes.Add(name, connectionIndex) |
| 65 | + End If |
| 66 | + ElseIf nameExists And Not overwriteExisting Then |
| 67 | + throwException = True |
| 68 | + End If |
| 69 | + Connection._staticInitDoneLock.ExitWriteLock() |
| 70 | + If throwException Then |
| 71 | + Throw New Exception($"Connection name: '{name}' allready exists.") |
| 72 | + End If |
| 73 | + End Sub |
| 74 | +End Class |
0 commit comments