Datenbank auslesen

  • C#

Es gibt 3 Antworten in diesem Thema. Der letzte Beitrag () ist von ErfinderDesRades.

    Datenbank auslesen

    Moin,

    Jemand eine Idee was ich falsch mache?
    Das Programm soll ganz einfach alle Vornamen in einer Messagebox ausgeben...

    C#-Quellcode

    1. private void Persdb()
    2. {
    3. //Verbindungsaufbau
    4. OleDbConnection con = new OleDbConnection();
    5. OleDbCommand cmd = new OleDbCommand();
    6. OleDbDataReader reader;
    7. con.ConnectionString =
    8. "Provider=Microsoft.ACE.OLEDB.12.0;" +
    9. "Data Source=C:\\Temp\\test.accdb";
    10. //Zugriff
    11. try
    12. {
    13. con.Open();
    14. cmd.Connection = con;
    15. cmd.CommandText = "select * from Personal";
    16. reader = cmd.ExecuteReader();
    17. while (reader.Read())
    18. {
    19. MessageBox.Show(reader["vorname"].ToString());
    20. }
    21. //Lesen
    22. reader.Close();
    23. con.Close();
    24. }catch(Exception ex)
    25. {
    26. MessageBox.Show(ex.Message);
    27. }
    28. }


    Fehlermeldung: System.ArgumentException: "Das Format der Initialisierungszeichenfolge stimmt nicht mit der Spezifikation überein, die bei Index '54' beginnt."


    //EDIT: Gut Funktioniert!
    Wie geht die Abfrage; wenn ID=1 Gebe Vorname von 1 aus?

    Frage: Wieso gibt das Programm die Namen nicht nach der Reihenfolge aus?
    Rein Logisch müsste er von oben nach unten die Namen ausgeben:
    1. Namen
    2. Namen
    3. Namen

    Er macht:
    3. Namen
    1. Namen
    2. Namen


    :)

    Dieser Beitrag wurde bereits 6 mal editiert, zuletzt von „newsletter“ ()

    "Der Reihe nach" gibts in einer Db ühaupt nicht. Wenn du keine SortierReihenfolge angibst, darf die Db sogar bei derselben Abfrage mit verschiedenen Reihenfolgen antworten (theoretisch - praktisch wird das wohl kaum vorkommen).



    Aber mal was anderes: Kennst du Databinding?
    Weil wie du Daten abrufst, wirst du später enorm Schwierigkeiten haben, Databinding für dich arbeiten zu lassen.
    Also prinzipiell sollte man sich mit DataReadern nicht abgeben.
    Immer gleich einen DataAdapter erzeugen, ein Dataset, und der DAtaAdapter befüllt eine Tabelle des Datasets.

    Solche Tabellen kann man dann mit Databinding Binden. Etwa an ein Datagridview.
    Damit wäre auf einen Schlag deine ganzen Messageboxen HirnFuck, denn wer wird sich durch 300 Messageboxen klicksen wollen, wenn er denselben Datenbestand auch direkt in eim DGV angugge kann?

    Also bei Interesse sag bescheid
    Hallo,

    Vielen Dank für deine Hilfe.

    Das wusste ich nicht. Habe bisher noch nicht mit Datenbanken gearbeitet.
    Wie kann ich die Reihenfolge angeben?

    Messageboxen verwende ich häufig um zu testen.

    Meinst du das mit Databinding? -->


    Vielleicht zuerst Grundlegende Fragen:
    1. Ich habe eine Access-Datenbank in Microsoft Access 2010 erstellt.
    inkl. Primärschlüssel festgelegt bei der Personalnummer.
    2. Die Datenbank in das C#-Projekt eingebunden:
    Projekt -> Neue Datenquelle --> Datenbank --> DataSet --> Neue Verbindung... --> Die Access-Datenbankdatei ausgewählt (.accdb)

    Nun ein DataGridview erstellt (Auswahl = die eingebundene Datei) (Zeigt die 2 Einträge an, welche ich bereits reingenommen habe beim Compilieren)

    Wie mache ich nun einen neuen Eintrag?
    Kann ich nun mit dem DataGridView arbeiten? ... ich denke dieses ist vorallem zur Anzeige gedacht...

    Das Vorgehen ist vorallem wichtig:
    1. Zeichenfolgen von Textboxen in das DataGridview übernehmen bei klick auf einen Button.
    2. Datagridview-Inhalt in Access-Datenbank (.accdb) abspeichern.
    3. Datagridview aktualisieren.

    Ist dieser Ablauf korrekt?

    Meine Idee:
    Das Programm läuft auf mehreren Computern, Datenbank ist auf einem Intranet-Server, welche bearbeitet wird und somit von allen Computern abgerufen wird beim Programmstart..

    Andere Lösung:
    Datei ist im Intranet, mehrere Personen arbeiten nun durch eine Desktop-Verknüpfung mit dem einen Programm.


    Momentaner Stand:

    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „newsletter“ ()

    newsletter schrieb:

    Vielleicht zuerst Grundlegende Fragen:
    1. Ich habe eine Access-Datenbank in Microsoft Access 2010 erstellt.
    inkl. Primärschlüssel festgelegt bei der Personalnummer.
    2. Die Datenbank in das C#-Projekt eingebunden:
    Projekt -> Neue Datenquelle --> Datenbank --> DataSet --> Neue Verbindung... --> Die Access-Datenbankdatei ausgewählt (.accdb)

    Nun ein DataGridview erstellt (Auswahl = die eingebundene Datei) (Zeigt die 2 Einträge an, welche ich bereits reingenommen habe beim Compilieren) <-hier!
    Ab hier schon falsch.
    Zieh einfach die gewünschte Tabelle aus dem Datenfenster aufs Form - so erhälst du ein komplett konfiguriertes DGV, inklusive BindingSource - alle Bindings bereits korrekt eingetragen.
    Musst du nur noch wissen, was das Datenfenster ist - guck dir dafür vier Views-Videos an - da ist das vorgeturnt, glaub in jedem Film an mindest. einer Stelle.
    Da ist noch allerlei mehr vorgeturnt, auch der DetailView, den du im weiteren ansprichst - wie gesagt: würde man ganz anners machen - gugge Videos.

    Beachte bei den vids, dass die das Dataset selbst erstellen, und dann auch nicht von einer DB befüllen, sondern einfach in eine Datei abspeichern/laden.
    Zur Entwicklung ist das wesentlich einfacher - zumal kaum ein Datenmodell jemals von Anfang bis Ende das gleiche bleibt.

    Wie dem auch sei - dein Dataset ist halt von einer DB generiert, und damit sind alle Binding-Techniken, die inne Vids gezeigt werden, auch bei dir verfügbar (wenn dein Datenmodell das hergibt)
    Aber zunächstmal scheinst du ja nur eine einzige Tabelle in deim Modell zu haben - naja, abwarten... ;)