vb.net – Programmparameter auslagern

Des öfteren steht man vor dem Problem, gewisse Parameter in einen erstellten Programm zu ändern. Solche Parameter können zum Beispiel die IP Adresse oder der Port zu einer Datenbank sein. Das geschriebene Programm soll ein gewisses Maß an Flexibilität bieten und möglichst auch mit anderen Datenbanken Verbindung aufnehmen können.
Hat man die Verbindungsdaten fest im Programm verankert, kommt man um eine Änderung und Neuerstellung nicht herum. Praktischer ist es an dieser Stelle, variable Konfigurationsdaten in eine Textdatei auszulagern. Vorzüglicher weise nennt man diese Datei config.ini und speichert alle nötigen Informationen zum Beispiel nach folgenden Schema:
db_server=192.168.0.20
db_port=3386
db_database=databasename
db_user=username
db_pwd=passwort

..
Natürlich kann man sich auch einen anderes Schema ausdenken und zum Beispiel anstatt = ein anderes Trennzeichen verwenden. Wichtig an dieser Stelle ist nur, dass ein Trennzeichen den Wert von einen bestimmten Feld trennt.  Die weiter unten beschrieben Funktionen zum auslesen der Config Daten benötigen ein klare Trennung zwischen Feldern und deren Eigenschaften.
db_pwd …. Natürlich ist es riskant, Passwörter im Klartext in einer Textdatei zu speichern. Um eventuellen Missbrauch zu vermeiden, sollte man sich im klaren sein, ob es ein Sicherheitsrisiko darstellt, wenn Dritte das Passwort in Erfahrung bringen. Programmiert man zum Beispiel einen simplen Client, der nur Daten darstellt und somit nur Select Abfragen auf bestimmte Tabellen in einer Datenbank ausführen darf, so ist das Risiko gering. Ein weitere Möglichkeit wäre, das Passwort mit einer eigenen Verschlüsselung zu versehen.
Den Zugriff auf die Parameter erhält man über 2 Funktionen. In der ersten Funktion wird die Config.ini per Streamreader in ein globales Array geladen und steht somit Programm weit zur Verfügung. Praktischerweise lädt man die Config beim Programmstart. Ebenfalls ist ein späteres Nachladen denkbar, ein Neustart der Anwendung für eine Config Änderung ist dann nicht mehr notwendig.
Die zweite Funktion fragt das Array nach einen Feld ab und liefert dessen Wert zurück.

Public config(100,1) As String

globales Zweidimensionales Array mit 100 möglichen Einträgen

'+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
'funktion - config einlesen	'+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Public Sub func_read_config
Dim fso As New IO.StreamReader(path.GetDirectoryName(Application.ExecutablePath) & "\config.ini")
Dim readline As String
Dim cfg_split() As String
Dim sub_counter As String
Do
    readline=fso.ReadLine
    If Not (readline Is Nothing) or readline <> " " Then
        If not mid(s,1,1) = "//" or not s = " " Then
            try
                cfg_split = split(readline,"=")
                    config(sub_counter,0) = cfg_split(0)
                    config(sub_counter,1) = cfg_split(1)
            Catch
            End try
        End If
   End If
   sub_counter += 1
Loop Until readline Is Nothing
fso.Close
End Sub

Per Streamreader wird die Config.ini geladen > Do Loop liest zeilenweise die Datei > Prüfung ob die Zeile leer ist oder ein Kommentar gefunden wurde > Zeile wird getrennt durch = > Feld wird den Config Array(x,0) zugewiesen, Wert wird den Config Array(x,1) zugewiesen

Call func_read_config

Durch Aufruf der Funktion wird die Config.ini eingelesen.
Alle Parameter befinden sich nun in dem Config Array und lassen sich nun verwenden. Allerdings weiß man nicht an welcher Position im Array sich der gesuchte Wert befindet. Für die Suche benutzt man folgende Funktion.

'++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
'funktion - config arry lesen und angeforderte variable zurückgeben
'++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Public Function func_read_config_ary(sub_cfg_name)
Dim sub_cfg_setting As String = " "
For x = 0 To 100
    If (config(x,0)) = sub_cfg_name Then
        sub_cfg_name = config(x,1)
    End If
Next
If sub_cgf_setting = " " then
    return "no data"
else
    return sub_cfg_name
end if
End Function

sub_cfg_name enthält das zu suchende Feld > über die For Schleife wird geprüft ob die aktuelle Position im Array den gesuchten Feld entspricht > bei Übereinstimmung wird der Wert in der sub_cfg_setting Variable gespeichert > zum Schluss noch geprüft ob ein Wert gefunden wurde, falls kein Wert gefunden wurde, wird ein “no data” zurückgegeben.
Möchte man nun einen Wert eines bestimmten Parameters abfragen, dann kann man dies wie folgt erledigen:

Public mysql_server As String = func_read_config_ary("mysql_server")

Wie man sehen kann, rufe ich die IP Adresse für den Mysql Server während der Erstellung der mysql_server Variable ab. Ein direkte Nutzung ist so in den meisten Fällen möglich.

One thought on “vb.net – Programmparameter auslagern

Comments are closed.