Announcement

Collapse
No announcement yet.

richtig Programmieren mit mySQL

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • richtig Programmieren mit mySQL

    Hallo,

    ich bin relativ neu im Programmieren und bin z.Z. dabei mich in C# einzuarbeiten.
    ich habe in meiner Software eine Klasse erstellt, die für XML-Dateien zuständig ist. Eine Methode ist z.B. xmlRead,xmlWrite oder xmlEdit. Das klappt alles super.

    Jetzt möchte ich auch eine Verbindung zu einem mySQL Server herstellen, die Verbindung haut auch hin und ich kann z.B. eine textBox füllen. Ich habe im Netz nur Beispiele gefunden, damit cih in meine Anwendung direkt mySQL-Anweisungen einfügen kann. Da ich in der Anwendung aber bestimmt ca. 50 x den Aufruf benötige, würde ich dies gerne eine separate Klasse wie bei XML erledigen lassen.

    Wie kann ich Daten aus der Datenbank am besten über die Klasse auslesen (Connector/Net) und in ein Array speichern, welches Meine Anwendung dann entgegennimmt oder noch besser, weiß jemand, wo eine solche Klasse zum testen zu haben ist??

    Vielen Dank

    Daniel
    Zuletzt editiert von Schlaubi; 09.04.2008, 14:54.

  • #2
    Hallo,

    ein mögliches Verfahren ist, dass Du in eine DbConnector-Klasse je eine Methode für Select, Update, Insert, Delete, Change (= DbDataAdapter.Update) einbaust. Beispiel für Select-Befehle:
    Code:
    public DataTable GetData(string connString, string selectString)
    {
        //  bereite die Tabelle mit den Select-Ergebnissen vor
        DataTable result = new DataTable("Result");
        using(DbConnection conn = new DbConnection(connString)) {
            DbDataAdapter da = new DbDataAdapter(selectString, conn);
            da.Fill(result);
        }
        return result;
    }
    Ähnlich können auch andere Sql-Befehle mit ExecuteNonQuery usw. verbunden werden.

    Wenn das Schema noch nicht klar ist, bitte nachfragen! Ansonsten gehört das ins Unterforum ADO.NET.

    Jürgen

    Comment


    • #3
      ich hab es jetzt mal mit folgenden Zeilen versucht:
      Code:
              public static Array dbRead()
              {
                      file f = new file();
                      crypto c = new crypto();
                      string password = crypto.DecryptMessage(file.readNode("Password"), "*****");
                      string MyConString = "server=" + file.readNode("Server") + ";uid=" + file.readNode("Username") + ";" +
                                          "pwd=" + password + ";database=" + file.readNode("Database") + ";";
                      MySqlConnection connection = new MySqlConnection(MyConString);
                      MySqlCommand command = connection.CreateCommand();
      
                          MySqlDataReader Reader;
                          command.CommandText = "select Username from User";
                          connection.Open();
                          Reader = command.ExecuteReader();
                          while (Reader.Read())
                          {
                              //Schleife ausführen
                              string thisrow = null;
                              string[] r;
                              for (int i = 0; i < Reader.FieldCount; i++)
                              {
                                  thisrow = Reader.GetValue(i).ToString();
                                  r[i] = thisrow;
                                  return r;
                              }
                          }
                          connection.Close();
      
              }
      Der Compiler bricht mir jedoch immer mit
      Code:
      Fehler	1	Verwendung der nicht zugewiesenen lokalen Variablen "r"
      ab. Woran kann das liegen? Wäre das ein hinnehmbarer Weg, oder soll ich diese Idee vergessen?

      Comment


      • #4
        Wenn Du Deinen Code mit meinem vergleichst, solltest Du feststellen, dass meiner viel kürzer und einfacher strukturiert ist. Schon das spricht dafür, dass ein solcher Ansatz besser ist.

        Deine Lösung mit Array musst Du sofort vergessen: Arrays haben unter NET eine feste, unveränderliche Größe; schon deswegen sollte man einen großen Bogen um Arrays machen. Wenn überhaupt, ist List<irgendwas> zu verwenden.

        Mein Vorschlag mit DbDataAdapter und DataTable fasst alles in zwei Befehle zusammen. Das Umspeichern aller einzelnen Zeilen per DataReader erfolgt automatisch! Es gibt natürlich noch andere Wege, aber eine solche DataTable wird immer flexibel nach den zurückgegebenen Daten erstellt.

        Konkret hast Du außerdem folgende Fehler, die sehr stark auf fehlende Grundlagen hinweisen:

        Die Variable r wird nur deklariert, es fehlt aber eine Zuweisung von Arbeitsspeicher durch new. Deshalb können in r[i] auch keine Werte eingetragen werden.

        Die Methode wird durch return "mittendrin" verlassen. Damit wird nur der erste Wert in der ersten Zeile ausgelesen, weder der DataReader noch die DbConnection werden geschlossen.

        Die DbConnection sollte immer (wie bei meinem Vorschlag) in einem using-Block gekapselt werden.

        Jürgen

        Comment


        • #5
          Hallo Jürgen,

          vielen Dank für diese Erklärung, welche sehr einleuchtend klingt. Das mit den fehlenden Grundlagen muss ich mir selbst eingestehen, da ich noch sehr frisch bei C# bin.

          Ich werde mich morgen mal mit DataTables einlesen. Ich hoffe, ich darf Dich / Euch mit weiteren Fragen belästigen.

          Vielen Dank !

          Daniel

          Comment


          • #6
            Vielen Dank,

            mit Deiner Erklärung und folgender Seite hat alles bestens geklappt:
            http://code-inside.de/blog/2007/11/2...gen-net-mysql/

            Daniel

            Comment

            Working...
            X