int aus sql-datenbank auslesen

dumbaz28

Mitglied
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:
        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 :)
 
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.

SQL:
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?
 
Zuletzt bearbeitet:
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.
 
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)
C#:
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:
C#:
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
 
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)
 
"string sql" enthält den kompletten SQL-Query.

Wenn du mit einem DataGridView arbeitest, ist es noch viel einfacher als du denkst.
C#:
DataGridView grid;
DataTable table;
...
grid.DataSource = table;

Ansonsten kannst du auch über eine DataTable iterieren.
C#:
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.
}
 
Zuletzt bearbeitet:
so, DataGridView ist gefüllt... Verdammt sind das jetzt wenig Zeilen :D

aber jetzt sollte ich nach einzelnen Einträge suchen, um diese zu vergleichen. Geht das auch noch?
 
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.
 

Neue Beiträge

Zurück