Laden...

Alle Zeilen einer MySql-Tabelle auslesen und als List zurückgeben

Erstellt von xp21xp vor 5 Jahren Letzter Beitrag vor 5 Jahren 2.885 Views
X
xp21xp Themenstarter:in
22 Beiträge seit 2018
vor 5 Jahren
Alle Zeilen einer MySql-Tabelle auslesen und als List zurückgeben

Tach alle sammt,

Zu meinem Problem ich möchte aus einer MYSQL-Datenbank alle Werte einer Spalte auslesen allerdings klappt das nicht.
Ich lese jede Zeile einzeln aus und trage dann denn Wert in eine String ein. Dieser wird dann in eine Array Liste eingefügt welche die Methode dann zurückgibt.

Ich würde mich über eure Hilfe freuen.

Fehlercode:> Fehlermeldung:

System.IndexOutOfRangeException: Der Index war außerhalb des Arraybereichs.
bei MySql.Data.MySqlClient.Interceptors.ExceptionInter ceptor.Throw(Exception exception)
bei MySql.Data.MySqlClient.MySqlConnection.Throw(Excep tion ex)
bei MySql.Data.MySqlClient.MySqlDataReader.Throw(Excep tion ex)
bei MySql.Data.MySqlClient.MySqlDataReader.GetValue(In t32 i)
bei MySql.Data.MySqlClient.MySqlDataReader.get_Item(In t32 i)
bei Roboter.MYSQL.MYSQL_Vorhandene_Programme_abfragen. Vorhandene_Programme_abfragen() in C:\Users\Tino\Google Drive\Arbeit\Visual Studio dateien\Roboter\Roboter\MYSQL\MYSQL_Vorhandene_Pro gramme_abfragen.cs:Zeile 32.

Button der die Methode aufruft:

private void button_laden_Click(object sender, EventArgs e) {
 try {
  String[] Programme = MYSQL.MYSQL_Vorhandene_Programme_abfragen.Vorhande ne_Programme_abfragen();
  Listedateien.Items.Clear();
  Listedateien.Items.Add(Programme);


 } catch {
  MessageBox.Show("Fehler beim Laden der Dateien");
 }

}

Meine Methode die das ganze ausführt:



 public static String[] Vorhandene_Programme_abfragen() {


  try {
   MySqlConnection con = new MySqlConnection(Form1.MySQLConnectionString);
   con.Open();

   string Programme = $ "SELECT Programmname FROM Programme";
   MySqlCommand com2 = new MySqlCommand(Programme, con);
   MySqlDataReader reader = com2.ExecuteReader();

   String[] Programme1 = new String[10];

   for (int i = 0; i < 10; i++) {
    reader.Read();
    string Program = reader[i].ToString();
    Programme1[i] = Program;

   }
   reader.Close();
   return Programme1;



  } catch (Exception ex) {
   MessageBox.Show(ex.ToString());

  }
  return null;



 }
H
523 Beiträge seit 2008
vor 5 Jahren

Du verwendest den DataReader nicht korrekt. Du kannst als Index entweder die Ordnungszahl oder den Namen der Spalte übergeben:

reader[0]

oder

reader["Programmname"]

	List<string> programme = new List<string>();
	while (reader.Read())
	{
		programme.Add(reader["Programmname"].ToString();
	}

16.807 Beiträge seit 2008
vor 5 Jahren

Hallo

auch als Neuling darf man sich an [Hinweis] Wie poste ich richtig? halten.
Bitte Code Tags verwenden, wenn Du schon Hilfe erwartest 😉

Zudem könnte man eine bessere Bezeichnung für den Titel wählen...
Stell Dir vor das ganze Forum heisst "Problem mit xyz"...

T
2.219 Beiträge seit 2008
vor 5 Jahren

Auch sieht deine Verarbeitung beim auslesen sehr komisch aus.
Dein Code sieht nach einer Bastellösung für ein LIMIT 10.
Deine Verarbeitung würde z.B. knallen, wenn du weniger als 10 Einträge in der Tabelle hast.
Wenn du mehr hast, dann würdest du diese auch nicht mitlesen.

Am besten nimmst du eine while Schleife mit reader.Read() und als Container eine List<string>
Dann musst du auch nicht wissen, wieviele Einträge aktuell vonhanden sind, da der Reader dir alle liefert und die List<T> die immer per Add die Einträge gepusht bekommt.

Ebenfalls schließt du zwar deinen Reader aber nicht deine Connection.
Hier solltest du dir mal using anschauen.
Dazu natürlich auch mal IDisposable mit der Dispose Methode.

Auch solltest du deinen Code Stil an den allgemeinen Code Stil von C# annähern.
Methoden Namen werden dort nicht per _ getrennt, dass liest sich aus meiner Sicht immer furchtbar.

T-Virus

Developer, Developer, Developer, Developer....

99 little bugs in the code, 99 little bugs. Take one down, patch it around, 117 little bugs in the code.

X
xp21xp Themenstarter:in
22 Beiträge seit 2018
vor 5 Jahren

Danke an alle! funktioniert alles super🙂 👍

X
xp21xp Themenstarter:in
22 Beiträge seit 2018
vor 5 Jahren

Hey,

du hast vollkommen recht das ganze ist eine Bastel Lösung. Ich bin ein absoluter Anfänger und freue mich das du mich auf meine Fehler aufmerksam machst jedoch hätte ich eine Frage bezüglich des Code Stils. Mir ist bewusst das meine Namen etc. nicht gerade schön sind aber was macht den C# Stil aus? Ich würde gerne so programmieren das es auch an den C# Stil angelehnt ist.

xp21xp

Hinweis von Abt vor 5 Jahren

Keine Full Quotes
[Hinweis] Wie poste ich richtig?

16.807 Beiträge seit 2008
vor 5 Jahren

Es gibt viel Dialekt in der C# Sprache, aber im Prinzip hält sich die Gemeinschaft an die Konventionen und Empfehlungen von Microsoft.
[Artikel] C#: Richtlinien für die Namensvergabe