Erstmal zu meiner Grundidee wieso ich das vorhabe, was ich machen will. Ich mache mir gerade eine Klasse die Daten aus einer MySQL Tabelle auslesen soll. Dafür habe ich dann die Methode select(string query) die die abfrage durchführt und dann true oder false zurückgibt. Nun möchte ich gerne eine Methode schreiben die ich fetchArray nenne und die mir ein Array zurückgibt in dem sich Hashtables befinden die als Key den Spaltennamen haben und als value halt den Wert. In jedem abschnitt des Arrays (also back[0], back[1] etc.) soll dann ein Datensatz drin stehen, daher das Array. Die Methode liefert dann das Array zurück, damit ich dieses dann mit einer foreach schleife auslesen kann änhlich wie ich es bei php mache.
Der Programm ablauf soll also etwa so aussehen:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7:
| MysqlHandler mysql = new MysqlHandler(); mysql.connect("localhost", "root", "passwort", "meinedatenbank"); mysql.select("SELECT * from news"); foreach(Hashtable row in mysql.fetchArray()) { Console.WriteLine("id: "+row["id"]+"news:"+row["news"]); } |
Jetzt zu meinem eigentlichen Problem. Wenn ich die Daten in einer Hashtable lade und dieses dann dem Array zuweise und dann den nächsten Datensatz dem array zuweise, dann sind in beiden Abschnitten des Arrays die selben Werte.
Ein Beispiel wird sicher deutlicher machen was ich meine:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21:
| Hashtable rowData = new Hashtable(); Hashtable[] back = new Hashtable[3];
rowData.Add("id", "1"); rowData.Add("day", "2009-01-01"); back[0] = rowData; Console.WriteLine("id: "+back[0]["id"]+" day: "+back[0]["day"]); rowData.Clear(); rowData.Add("id", "2"); rowData.Add("day", "2009-02-02"); back[1] = rowData; rowData.Clear(); rowData.Add("id", "3"); rowData.Add("day", "2009-03-03"); back[2] = rowData;
foreach (Hashtable row in back) { Console.WriteLine("id: "+row["id"]+" day: "+row["day"]); } Console.ReadKey(); |
Ausgabe:
C#-Quelltext
1: 2: 3: 4:
| id: 1 day: 2009-01-01 id: 3 day: 2009-03-03 id: 3 day: 2009-03-03 id: 3 day: 2009-03-03 |
Wenn ich back[0] direkt ausgebe sind also die richtigen daten drin. Sobald ich aber rowData ändere ändern sich auch die bereits im array gespeicherten Daten. sollte das was in back[0] gespeichert ist nicht unabhängig sein von rowData? wenn ich eine variable i in back[0] speicher und i anschließend um 1 erhöhe ist in back[0] doch auch immernoch der alte wert gespeichert.
Ich bin ratlos.