tutorials.de Buch-Aktion 05/2012
Like Tree1Danke
  • 1 Beitrag von CPoly
ERLEDIGT
NEIN
ANTWORTEN
7
ZUGRIFFE
1076
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    dumbaz28 dumbaz28 ist offline Mitglied Bronze
    Registriert seit
    Mar 2009
    Beiträge
    31
    Hallo (:

    Ich hab eine SQL-datenbank, in der befinden sich nur VARCHAR-Werte und eine ID (int --> auto-increment). Bisher hab ich die ID nicht benötigt. Jetzt brauche ich aber auch die ID und kann sie mit meinem Code nicht auslesen, weil der nur string ausliest. Das ist mein Code:

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    
            public string auslesen(string tabelle, string spalte)
            {
                MySqlConnection connection = new MySqlConnection(myConnectionString);
                MySqlCommand command = connection.CreateCommand();
                command.CommandText = "SELECT " + spalte + " FROM " + tabelle;
     
                MySqlDataReader reader;
                connection.Open();
                reader = command.ExecuteReader();
     
                string wert = "";
     
                while (reader.Read())
                {
                    for (int i = 0; i < reader.FieldCount; i++)
                    {
                        wert += reader.GetString(i) + ",";
                    }
                }
     
                reader.Close();
                return wert;
            }

    Der Code klappt super, nur eben nicht für den Integer. Habt in eine Idee? Den Wert splite ich übrigens später in ein Array. Die ID muss später auch in ein Array.

    Danke (:
     

  2. #2
    CPoly CPoly ist offline Mitglied Weizenbier
    tutorials.de Premium-User
    Registriert seit
    Sep 2009
    Beiträge
    2.445
    reader.GetInt32() lautet die Antwort.

    Ich verstehe aber nicht ganz, wozu deine Methode "auslesen" gut ist. Das was die Methode macht, kann MySql auch von selbst schon.

    Code sql:
    1
    
    SELECT GROUP_CONCAT(spalte) FROM tabelle GROUP BY NULL;

    Sollte dein parameter "spalte" aber mehrere Spalten enthalten, verstehe ich es erst recht nicht. Dann hättest du ganz viele Werte mit Kommas getrennt, welche du dann wieder auseinander nehmen darfst und dabei auch noch beachten musst, das jede Stelle eine andere Bedeutung hat.

    Edit: hab gerade erst gelesen, dass du nachher alles wieder in ein Array packst. Wozu machst du das?
    Geändert von CPoly (24.01.10 um 15:23 Uhr)
     

  3. #3
    dumbaz28 dumbaz28 ist offline Mitglied Bronze
    Registriert seit
    Mar 2009
    Beiträge
    31
    Also, "auslesen" ist in einer extra Klasse. Meine Tabelle umfasst mehrere Spalten.
    Die Werte werden in einen String gelesen, den ich dann beim "," trenne beim Klickereignis. Reader.GetInt32() hab ich probiert, aber dann hab ich ja da das Problem mit dem ",".

    Die Lösung hab ich mir so zusammengebastelt. d.h. ich kann direkt beim auslesen in ein Array schreiben und das dann später weiterverwenden?


    Edit:
    achja, die spalte ist jeweils einzeln.
     

  4. #4
    CPoly CPoly ist offline Mitglied Weizenbier
    tutorials.de Premium-User
    Registriert seit
    Sep 2009
    Beiträge
    2.445
    Wenn du ohnehin alle ausgelesenen Daten brauchst, kannst du anstelle des DataReader auch einen DataAdapter benutzen und dein Ergebnis direkt in eine DataTable laden.

    (ist von meinem Quelltext kopiert und muss an deine Bedürfnisse angepasst werden)
    Code csharp:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    
    public DataTable send(string sql)
            {
                using(MySqlConnection myConnection = new MySqlConnection(ConfigurationManager.ConnectionStrings["MYSQL"].ToString()))
                {
                    MySqlDataAdapter myDataAdapter = new MySqlDataAdapter(sql, myConnection);            
                    DataTable myDataTable = new DataTable();
                    myDataAdapter.Fill(myDataTable);
         
                    myDataAdapter.Dispose();
                    myConnection.Close();
     
                    return myDataTable;
                }
            }

    oder mit deiner auslesen Methode:
    Code csharp:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    
    public DataTable auslesen(string tabelle, string spalte)
            {
                MySqlConnection connection = new MySqlConnection(myConnectionString);
                MySqlCommand command = connection.CreateCommand();
                command.CommandText = "SELECT " + spalte + " FROM " + tabelle;
     
                MySqlDataReader reader;
                connection.Open();
                reader = command.ExecuteReader();
     
    DataTable table = new DataTable();
    table.load(reader);
     
                reader.Close();
                return table;
            }

    Aber DataReader -> DataTable ist langsamer als DataAdapter -> DataTable
     

  5. #5
    dumbaz28 dumbaz28 ist offline Mitglied Bronze
    Registriert seit
    Mar 2009
    Beiträge
    31
    welchen wert erhält "send" mit "string sql"?

    beim reader enthält "table" dann vermutlich den array den ich mühsam ermittelt haben? aber wie arbeite ich weiter mit myDataTable? Ich brauche ja später jeden wert einzeln, um in im DataGridView anzuzeigen (was bisher einwandfrei funktioniert)
     

  6. #6
    CPoly CPoly ist offline Mitglied Weizenbier
    tutorials.de Premium-User
    Registriert seit
    Sep 2009
    Beiträge
    2.445
    "string sql" enthält den kompletten SQL-Query.

    Wenn du mit einem DataGridView arbeitest, ist es noch viel einfacher als du denkst.
    Code csharp:
    1
    2
    3
    4
    
    DataGridView grid;
    DataTable table;
    ...
    grid.DataSource = table;

    Ansonsten kannst du auch über eine DataTable iterieren.
    Code csharp:
    1
    2
    3
    4
    5
    6
    7
    
    foreach(DataRow row in table)
    {
    int i =(int)row["spaltenname"];
    string s = row["spaltenname2"].toString();
    DateTime dt = (DateTime)row["spaltenname3"];
    //und so weiter. je nachdem welche Datentypen du in der MySql-Tabelle hast.
    }
    Geändert von CPoly (24.01.10 um 17:47 Uhr)
    dumbaz28 bedankt sich. 

  7. #7
    dumbaz28 dumbaz28 ist offline Mitglied Bronze
    Registriert seit
    Mar 2009
    Beiträge
    31
    so, DataGridView ist gefüllt... Verdammt sind das jetzt wenig Zeilen

    aber jetzt sollte ich nach einzelnen Einträge suchen, um diese zu vergleichen. Geht das auch noch?
     

  8. #8
    CPoly CPoly ist offline Mitglied Weizenbier
    tutorials.de Premium-User
    Registriert seit
    Sep 2009
    Beiträge
    2.445
    Die DataTable hat eine Select()-Methode, welche ein reduziertes SQL beherrscht.

    Außerdem gibt es noch die Möglichkeit die DataTable nicht direkt an ein DataGridView zu binden, sondern eine BindingSource dazwischen zu schalten.

    Bevor du wieder fragst, versuch mit Google weiter zu kommen und wenn du dann hängst, helfen wir weiter. Denn wir lösen nicht deine Probleme, sondern helfen nur dabei.
     

Ähnliche Themen

  1. Datenbank auslesen
    Von marc669 im Forum PHP
    Antworten: 7
    Letzter Beitrag: 06.12.09, 00:24
  2. Datenbank auslesen via PHP
    Von Fruitgum im Forum PHP
    Antworten: 7
    Letzter Beitrag: 23.04.08, 12:33
  3. ID aus Datenbank auslesen
    Von Falloutboy6 im Forum Relationale Datenbanksysteme
    Antworten: 2
    Letzter Beitrag: 09.08.06, 14:24
  4. C# - Datenbank auslesen
    Von Alexander12 im Forum .NET Archiv
    Antworten: 3
    Letzter Beitrag: 20.07.05, 17:24
  5. Datenbank auslesen
    Von thomson im Forum Visual Basic 6.0
    Antworten: 4
    Letzter Beitrag: 15.06.04, 09:33