ERLEDIGT
NEIN
NEIN
ANTWORTEN
3
3
ZUGRIFFE
1503
1503
EMPFEHLEN
-
06.08.08 22:19 #1
- Registriert seit
- May 2007
- Beiträge
- 3
Hallo,
ich habe ein vermutlich sehr einfaches Problem, komme aber grad nicht auf eine elegante Variante. Ich frage eine Tabelle nach Felder ab (immer mit * in der aktuellen Version).
Nun weiß ich vorher nicht welche Felder ich zurück kriege, das hängt stark von der Tabelle ab. Ich weiß nur eins, es sind ziemlich viele. Ich weiß, von der Performance her sollte ich nur die holen die ich brauche, aber im aktuellen Entwicklungsstadium ist mir das zu mühsam.
Ich weiß schon wie ich die Namen der Spalten erhalte:
Code :1 2
for (int i = 0; i < reader.FieldCount; i++) Console.WriteLine("ColHeader" + reader.GetName(i));
Auch der Datentyp der Spalte ist kein Problem:
Code :1 2 3
for (int i = 0; i < reader.FieldCount; i++) Console.WriteLine("Type " + reader.GetProviderSpecificFieldType(i));
Auch eine Hilfsfunktion die mit dem Index für einen Namen gibt hab ich schon:
Code :1 2 3 4 5 6
public static int NameToInt(string name, MySqlDataReader reader) { for (int i = 0; i < reader.FieldCount; i++) if (reader.GetName(i) == name) return i; return -1; }
Und zu guter Letzt hab kann ich natürlich manuell Folgendes machen:
Code :1 2 3
uid = dbEntry.GetInt32( DBConnector.NameToInt("uid", dbEntry) );
Aber, wie der Experte sicher schon merkt, das ist unglaublich unelegant. Ich würde gerne einfach die eine Zeile aus der Datenbank in einer Art Datenstruktur speichern wo ich per String als Key auf gemischte Objekte zugreifen kann. Ok, ich hab grad ne Idee gehabt.. Ich poste das dennoch einmal, ich find die Beispiele oben ganz nett. Wenn ich meine Idee ausprobiert hab meld ich mich nochmal...
-
06.08.08 22:50 #2
- Registriert seit
- May 2007
- Beiträge
- 3
So,
folgender Code vermittelt hoffentlich einen Eindruck davon was ich machen möchte, ist aber sicher grausam Newbie Style... Das Switch hab ich nicht besser hingekriegt, und vermutlich geht das was ich hier veranstalte auf einer Zeile... Vorschläge sind immer willkommen...
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
class DBResult { public Dictionary<string, string> stringValues = new Dictionary<string, string>(); public Dictionary<string, int> intValues = new Dictionary<string, int>(); public Dictionary<string, string> objectValues = new Dictionary<string, string>(); public DBResult(MySqlDataReader dbEntry) { for (int i = 0; i < dbEntry.FieldCount; i++) { switch(dbEntry.GetProviderSpecificFieldType(i).ToString()) { case "System.int32": if (!dbEntry.IsDBNull(i)) intValues.Add(dbEntry.GetName(i), dbEntry.GetInt32(i)); break; case "System.String": if (!dbEntry.IsDBNull(i)) stringValues.Add(dbEntry.GetName(i), dbEntry.GetString(i)); break; default: if (!dbEntry.IsDBNull(i)) objectValues.Add(dbEntry.GetName(i), dbEntry.GetString(i)); break; } } } }
PS: Ist das Code Fenster eingentlich immer so schmal.. das ist ja grauenhaft, hat da schonmal jemand Bescheid gesagt...
-
07.08.08 09:46 #3
- Registriert seit
- Jan 2005
- Ort
- Frankfurt am Main
- Beiträge
- 297
Hallo Christian,
leider verstehe ich persönlich nicht was du da genau vor hast. Du hast 3 Dictionarys mit denen ich nichts anzufangen wüsste. Vielleicht kannst du kurz erläutern was du anschließend damit vor hast?
Ich bin mir nicht sicher, aber vielleicht hilft es dir ja weiter wenn du dir statt dem DataReader eine DataTable erstellst. Hier hast du einfachen Zugriff auf alle Zeilen und Spalten und du bekommst es sogar typisiert geliefert...
Code :1 2 3 4 5 6 7 8 9
MySqlCommand readCommand = new MySqlCommand(“SELECT * FROM test”, connection); MySqlDataAdapter adapter = new MySqlDataAdapter(readCommand); DataTable datatable = new DataTable(); adapter.Fill(datatable); for (int x = 0; x < datatable.Rows.Count; x++) { object[] values = datatable.Rows[x].ItemArray; }http://dirkgoldecker.spaces.live.com
. Microsoft Certified Technology Specialist
. Microsoft Certified Professional Developer
|-> Web Applications
-
07.08.08 09:59 #4
- Registriert seit
- May 2007
- Beiträge
- 3
Hi,
vielen Dank für die Antwort... Ja, ich sollte erst weiter in meinem C# Buch lesen und dann erst experimentieren. Ich habe gestern abend dann auch noch begeistert die DataTables entdeckt.
Um ehrlich zu sein bin ich sogar noch einen Schritt "weiter", ich werde mir heute mal LINQ mit Mysql anschauen. Das sieht sehr vielversprechend aus, da gibt es eine Implementierung die mit mit etwas Glück aus meiner MySQL direkt die entsprechenden Klassen erzeugt.
Sehr interessant das Ganze, und so elegant..
Jetzt nur noch Daumen drücken das es mit MySQL läuft, ich kann Typo3 schlecht auf MSSQL umstellen
Ähnliche Themen
-
Richtige Syntax bei Operatorüberladung, wann sind "friend", "const", "&" nötig?
Von mrs_schokokeks im Forum C/C++Antworten: 4Letzter Beitrag: 25.08.10, 19:13 -
[CS3] Transparentes PNG - "Für Web speichern" geht, gewöhnliches Speichern nicht
Von DarthShader im Forum PhotoshopAntworten: 5Letzter Beitrag: 04.06.10, 16:20 -
Eingabe in der timeline: "time*100" - bei Effekt "turbulentes Versetzen"-"Evolution"
Von MTMonline im Forum Videoschnitt, Videotechnik & -produktionAntworten: 2Letzter Beitrag: 25.04.08, 09:49 -
Finder methods + JBoss + Was expecting one of: "CONCAT" "SUBSTRING" ... "(" ... <STRI
Von cengizhdde im Forum Enterprise Java (JEE, J2EE, Spring & Co.)Antworten: 6Letzter Beitrag: 27.05.05, 15:29 -
Buch: "C++ für Kids" ... mdi speichern "Builder 1.0"
Von HubertS im Forum C/C++Antworten: 7Letzter Beitrag: 20.11.03, 21:26





Zitieren
Login





