tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
3
ZUGRIFFE
1503
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    ChristianR1905 ChristianR1905 ist offline Grünschnabel
    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...
     

  2. #2
    ChristianR1905 ChristianR1905 ist offline Grünschnabel
    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...
     

  3. #3
    M4st3r M4st3r ist offline Mitglied Brokat
    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

  4. #4
    ChristianR1905 ChristianR1905 ist offline Grünschnabel
    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

  1. Antworten: 4
    Letzter Beitrag: 25.08.10, 19:13
  2. Antworten: 5
    Letzter Beitrag: 04.06.10, 16:20
  3. Eingabe in der timeline: "time*100" - bei Effekt "turbulentes Versetzen"-"Evolution"
    Von MTMonline im Forum Videoschnitt, Videotechnik & -produktion
    Antworten: 2
    Letzter Beitrag: 25.04.08, 09:49
  4. Finder methods + JBoss + Was expecting one of: "CONCAT" "SUBSTRING" ... "(" ... <STRI
    Von cengizhdde im Forum Enterprise Java (JEE, J2EE, Spring & Co.)
    Antworten: 6
    Letzter Beitrag: 27.05.05, 15:29
  5. Antworten: 7
    Letzter Beitrag: 20.11.03, 21:26