{"id":7994,"date":"2010-11-19T10:40:55","date_gmt":"2010-11-19T09:40:55","guid":{"rendered":"http:\/\/funrecycler.com\/?p=7994"},"modified":"2010-11-19T10:40:55","modified_gmt":"2010-11-19T09:40:55","slug":"vb-net-programmparameter-auslagern","status":"publish","type":"post","link":"https:\/\/funrecycler.com\/index.php\/2010\/11\/19\/vb-net-programmparameter-auslagern\/","title":{"rendered":"vb.net &#8211; Programmparameter auslagern"},"content":{"rendered":"<p>Des \u00f6fteren steht man vor dem Problem, gewisse Parameter in einen erstellten Programm zu \u00e4ndern. Solche Parameter k\u00f6nnen zum Beispiel die IP Adresse oder der Port zu einer Datenbank sein. Das geschriebene Programm soll ein gewisses Ma\u00df an Flexibilit\u00e4t bieten und m\u00f6glichst auch mit anderen Datenbanken Verbindung aufnehmen k\u00f6nnen.<br \/>\nHat man die Verbindungsdaten fest im Programm verankert, kommt man um eine \u00c4nderung und Neuerstellung nicht herum. Praktischer ist es an dieser Stelle, variable Konfigurationsdaten in eine Textdatei auszulagern. Vorz\u00fcglicher weise nennt man diese Datei config.ini und speichert alle n\u00f6tigen Informationen zum Beispiel nach folgenden Schema:<br \/>\ndb_server=192.168.0.20<br \/>\ndb_port=3386<br \/>\ndb_database=databasename<br \/>\ndb_user=username<br \/>\ndb_pwd=passwort<br \/>\n&#8230;<br \/>\n..<br \/>\nNat\u00fcrlich 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.\u00a0 Die weiter unten beschrieben Funktionen zum auslesen der Config Daten ben\u00f6tigen ein klare Trennung zwischen Feldern und deren Eigenschaften.<br \/>\ndb_pwd &#8230;. Nat\u00fcrlich ist es riskant, Passw\u00f6rter 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\u00fchren darf, so ist das Risiko gering. Ein weitere M\u00f6glichkeit w\u00e4re, das Passwort mit einer eigenen Verschl\u00fcsselung zu versehen.<br \/>\nDen Zugriff auf die Parameter erh\u00e4lt man \u00fcber 2 Funktionen. In der ersten Funktion wird die Config.ini per Streamreader in ein globales Array geladen und steht somit Programm weit zur Verf\u00fcgung. Praktischerweise l\u00e4dt man die Config beim Programmstart. Ebenfalls ist ein sp\u00e4teres Nachladen denkbar, ein Neustart der Anwendung f\u00fcr eine Config \u00c4nderung ist dann nicht mehr notwendig.<br \/>\nDie zweite Funktion fragt das Array nach einen Feld ab und liefert dessen Wert zur\u00fcck.<\/p>\n<pre lang=\"VB\">Public config(100,1) As String<\/pre>\n<p>globales Zweidimensionales Array mit 100 m\u00f6glichen Eintr\u00e4gen<\/p>\n<pre lang=\"VB\">\n'+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n'funktion - config einlesen\t'+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\nPublic Sub func_read_config\nDim fso As New IO.StreamReader(path.GetDirectoryName(Application.ExecutablePath) & \"\\config.ini\")\nDim readline As String\nDim cfg_split() As String\nDim sub_counter As String\nDo\n    readline=fso.ReadLine\n    If Not (readline Is Nothing) or readline <> \" \" Then\n        If not mid(s,1,1) = \"\/\/\" or not s = \" \" Then\n            try\n                cfg_split = split(readline,\"=\")\n                    config(sub_counter,0) = cfg_split(0)\n                    config(sub_counter,1) = cfg_split(1)\n            Catch\n            End try\n        End If\n   End If\n   sub_counter += 1\nLoop Until readline Is Nothing\nfso.Close\nEnd Sub<\/pre>\n<p>Per Streamreader wird die Config.ini geladen > Do Loop liest zeilenweise die Datei > Pr\u00fcfung 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<\/p>\n<pre lang=\"VB\">Call func_read_config<\/pre>\n<p>Durch Aufruf der Funktion wird die Config.ini eingelesen.<br \/>\nAlle Parameter befinden sich nun in dem Config Array und lassen sich nun verwenden. Allerdings wei\u00df man nicht an welcher Position im Array sich der gesuchte Wert befindet. F\u00fcr die Suche benutzt man folgende Funktion.<\/p>\n<pre lang=\"VB\">\n'++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n'funktion - config arry lesen und angeforderte variable zur\u00fcckgeben\n'++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\nPublic Function func_read_config_ary(sub_cfg_name)\nDim sub_cfg_setting As String = \" \"\nFor x = 0 To 100\n    If (config(x,0)) = sub_cfg_name Then\n        sub_cfg_name = config(x,1)\n    End If\nNext\nIf sub_cgf_setting = \" \" then\n    return \"no data\"\nelse\n    return sub_cfg_name\nend if\nEnd Function\n<\/pre>\n<p>sub_cfg_name enth\u00e4lt das zu suchende Feld > \u00fcber die For Schleife wird gepr\u00fcft ob die aktuelle Position im Array den gesuchten Feld entspricht > bei \u00dcbereinstimmung wird der Wert in der sub_cfg_setting Variable gespeichert > zum Schluss noch gepr\u00fcft ob ein Wert gefunden wurde, falls kein Wert gefunden wurde, wird ein &#8222;no data&#8220; zur\u00fcckgegeben.<br \/>\nM\u00f6chte man nun einen Wert eines bestimmten Parameters abfragen, dann kann man dies wie folgt erledigen:<\/p>\n<pre lang=\"VB\">Public mysql_server As String = func_read_config_ary(\"mysql_server\")<\/pre>\n<p>Wie man sehen kann, rufe ich die IP Adresse f\u00fcr den Mysql Server w\u00e4hrend der Erstellung der mysql_server Variable ab. Ein direkte Nutzung ist so in den meisten F\u00e4llen m\u00f6glich.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Des \u00f6fteren steht man vor dem Problem, gewisse Parameter in einen erstellten Programm zu \u00e4ndern. Solche Parameter k\u00f6nnen<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[3,14],"tags":[1361,2815,2816,2818,2821],"class_list":["post-7994","post","type-post","status-publish","format-standard","hentry","category-computer-und-technik","category-programmieren","tag-ini-lesen","tag-vbnet","tag-vb-net-ary","tag-vb-net-config-array","tag-vb-net-parameter"],"_links":{"self":[{"href":"https:\/\/funrecycler.com\/index.php\/wp-json\/wp\/v2\/posts\/7994","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/funrecycler.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/funrecycler.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/funrecycler.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/funrecycler.com\/index.php\/wp-json\/wp\/v2\/comments?post=7994"}],"version-history":[{"count":0,"href":"https:\/\/funrecycler.com\/index.php\/wp-json\/wp\/v2\/posts\/7994\/revisions"}],"wp:attachment":[{"href":"https:\/\/funrecycler.com\/index.php\/wp-json\/wp\/v2\/media?parent=7994"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/funrecycler.com\/index.php\/wp-json\/wp\/v2\/categories?post=7994"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/funrecycler.com\/index.php\/wp-json\/wp\/v2\/tags?post=7994"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}