Laden...

XML Datei mit Zugangsdaten auslesen und...

Erstellt von ip08 vor 16 Jahren Letzter Beitrag vor 16 Jahren 1.521 Views
I
ip08 Themenstarter:in
2 Beiträge seit 2008
vor 16 Jahren
XML Datei mit Zugangsdaten auslesen und...

Hallo,
in einer XML Datei stehen bspw. folgende Daten:


<server>
     <dbname>dbname_1</dbname>
     <user>user_11</user>
     <pwd>pwd_11</pwd>
     <dbname>dbname_1</dbname>
     <user>user_12</user>
     <pwd>pwd_12</pwd>
     <dbname>dbname_2</dbname>
     <user>user_21</user>
     <pwd>pwd_21</pwd>
     <user>user_22</user>
     <pwd>pwd_22</pwd>
     <dbname>dbname_2</dbname>
</server>


Ist es besser die Daten per DOM oder XPATH auszulesen [ Größenordnung max. 5000 ]? Als nächstes die Daten in ein Array von Arrays speichern, deserialisieren und die per Schleife ausgelesenen XML-Daten an einen per new generierten Button übergeben, der per onClick-Ereignis den Benutzer mit einer DB verbindet.
Verfügt .NET über geeignete Controls?
Wie erreiche ich, dass dbname, user und pwd in der zweiten Dimension des Arrays landen?

Gruß
Ingo

343 Beiträge seit 2007
vor 16 Jahren

Hallo,

Wenn ich dir mal einen Tipp geben darf, dein XML-Dokument schaut etwas merkwürdig aus. Ich denke es wäre besser etwas in der Art zu machen:


<serverlist>
  <server>
     <dbname>dbname_1</dbname>
     <user>user_11</user>
     <pwd>pwd_11</pwd>
  </server>
  <server>
     <dbname>dbname_1</dbname>
     <user>user_12</user>
     <pwd>pwd_12</pwd>
  </server>
</serverlist>

2.) Zum Auslesen gibt es Klassen wie den XmlTextReader, oder über ein DataSet (dataset.ReadXml) oder auch mit XmlDocument.Load (oder so ähnlich)
Meiner Meinung nach Geschmackssache

3.) Würde ich die Daten nicht in Array von Arrays speichern, sondern eine eigene Klasse Server (oder ein anderer Name) anlege mit den Eigenschaften dbname, user und pwd. Und davon ein Array oder noch besser eine List<Server> machen.

List<Server> liste = new List<Server>();

Dann kannst mit mit liste.Add zum Beispiel neue Objekte hinzufügen, Objekte löschen, auslesen, ... ist einfach komfortabler als Arrays
Der Zugriff auf die einzelnen Objekte würde dann wie folgt aussehen:

string dbname = liste[position].dbname; //so würdest du z.B. an den Namen kommen

4.) Welche Controls meinst du über die .Net verfügen sollte?
Buttons -> ja natürlich - nennt sich Button
oder etwas zum Herstellen einer Datenbankverbindung -> gibts natürlich auch z.B. SQLConnection für den SQL-Server

5.) der Vollständigkeit halber will ich dir auch noch sagen wie du (wenn du es mit zweidimensionalen Arrays machen würdest, was ich aber ganz und gar nicht empfehlen kann) auf die zweite Dimension zugreifst.


int posServer;
string dbname = array[posSever][0];
string user = array[posServer][1];
string pwd = array[posServer[2];
//Angenommen du hast es auch in dieser Reihenfolge reingespeichert

Lg
Preli

[- www.saftware.net -](http://www.saftware.net/)
I
ip08 Themenstarter:in
2 Beiträge seit 2008
vor 16 Jahren

Hallo Preli,
mir gefällt die List-Idee, weil es sich bei der XML-Datei ja auch um eine dynamisch generierte Liste - wie treffend 😉 - handelt.

Bin in Sachen C# Neuling und tu mich insofern vor allem mit der Dynamik schwer.

Die Liste würde ich in etwa so auslesen:


public static void GetListElements(IList list) {
  foreach(object temp in list) {
    if(temp is ClassA) {
      Console.Write("Collection-Index = {0}", list.IndexOf(temp));
      Console.WriteLine(" / Objekt-Nr.{0}", ((ClassA)temp).intProp);
    }
  }
}

Foreach reicht, weil nur lesend reicht und diese Schleife ja eh nach dem letzten Element abbricht.

Wie ich auf die Klasseneigenschaften zugreife ist alles klar. Ich kann aber gut einen Rat brauchen, wenn's darum geht, dass pro Server-dbname-user-pwd-Eintrag ein Button mit dynamischer Anordnung auf meiner Form generiert werden soll, der beim onClick-Ereignis den Benutzer mit der entsprechenden DB verbindet.

Grüße
INgo

343 Beiträge seit 2007
vor 16 Jahren

Hallo,

Also was du mit dem GetListElements meinst ist mir nicht so klar, da alleine die Namensgebung merkwürdig ist. Get sollte ja eigentlich etwas zurückliefern. Ich denke du machst das etwas zu kompliziert.


List<ClassA> list = new List<ClassA>();
//... Liste füllen
foreach(ClassA temp in list)
{
  Button b = new Button();
  b.Text = temp.Prop1;
  b.Left = ...
  b.Top = ...
  b.Click += new EventHandler(b_Click);
  Controls.Add(b);
}

//eigene Funktion
void b_Click(object sender, EventArgs e)
{
  (sender as Button).xxx //so kann dann auf DEN Button zugegriffen werden, der geklickt wurde
}

Wobei sich fast eine for-Schleife auch eigenen würde, da du dann eine Laufvariable (nennen wir sie mal i) hast und die Top-Eigenschaft danach berechnen kannst. b.Top = i * ("buttonhöhe" + "abstand");

Über Controls.Add wird der Button dann tatsächlich auch auf der Form angezeigt (vorausgesetzt dieser Code befindet sich "in" einer Form)

Vielleicht nicht ganz so einfach für einen Anfänger, ich weiß, schau ab und zu vielleicht ins 🛈 daraus kann man echt viele Grundlagen lernen.

Lg
Preli

[- www.saftware.net -](http://www.saftware.net/)
Gelöschter Account
vor 16 Jahren

du hast noch eingangs erwähnt das es sich um 5000 einträge handelt. wenn du eine foreach durchlaufen tust, und 5000 buttons erstellst, dann wirst du mit dem programm nicht glücklich.