Announcement

Collapse
No announcement yet.

inhalt eines datasets ausgeben

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

  • inhalt eines datasets ausgeben

    hey
    ich hab noch nicht viel mit datenbanken gearbeitet und hab da mal ne frage
    ich habe mich mit einer access datenbank verbunden
    nun möchte ich mit sql etwas auslesen
    ich lese mit dataadapter und fülle die daten in ein dataset
    ich hoff dass es bis hierher stimmt was ich mache
    nun möchte ich einfach den inhalt des datasets zb. in einer textbox ausgeben
    wie geht das?
    Gruß
    mikgne

  • #2
    Hallo,

    Eine ausfuehrliche Anleitung findest du zB hier

    http://support.microsoft.com/kb/327413
    *-- robert.oh. --*

    Comment


    • #3
      danke robert.oh.
      Gruß
      mikgne

      Comment


      • #4
        ich hab des jetzt so gemacht:

        namespace WindowsFormsApplication1
        {
        public partial class Form1 : Form
        {
        System.Data.OleDb.OleDbDataAdapter da = new System.Data.OleDb.OleDbDataAdapter();
        System.Data.DataSet ds = new DataSet();
        public Form1()
        {
        InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
        da.SelectCommand = new System.Data.OleDb.OleDbCommand("select buchstabe from tabelle1 where zahl = '3'");
        da.Fill(ds);
        textBox1.Text = ds.Tables[1].Rows.ToString();



        }
        }
        }
        sdfyxfdvdfd
        Gruß
        mikgne

        Comment


        • #5
          Hallo,

          im Prinzip bist Du auf dem richtigen Weg, aber ich habe noch ein paar grundsätzliche Anmerkungen.
          • Schon die Ausgangsfrage klingt seltsam: Du willst den Inhalt des DataSets (also von n Zeilen mal m Spalten) in einer einzigen TextBox ausgeben; das liest sich sehr nach falschem Konzept.
          • Wo ist eigentlich die DbConnection zur Verknüpfung mit der Datenbank?
          • Grundsätzlich gilt unter NET: Alle Objekte sollen nur solange gültig bleiben, wie sie benötigt werden. Das gilt in erster Linie für die DbConnection, meistens auch für den DbDataAdapter und natürlich den DbCommand.
          • Das DataSet ist eine Datenmenge im Arbeitsspeicher, der DbDataAdapter dient zur Verknüpfung zwischen einer Datenmenge und einer Datenbank. Diese benutzt man also, wenn man mehrere/viele Zeilen und Werte haben will, aber nicht für einen einzelnen Wert.
          • Je nach Ziel gibt es bessere Wege: Wenn ein einzelner Wert abgefragt wird, kann direkt DbCommand.ExecuteScalar verwendet werden; DataSet und DbDataAdapter sind überflüssig. Bedenke auch, dass es ExecuteNonQuery gibt.
          • Sql-Befehle sollten niemals - NIEMALS! - per String-Verknüpfung erstellt werden, sondern immer über DbCommand.Parameters. Kurzbegründung: Vermeidung von Formatierungsproblemen insb. bei Datumsangaben und von SQL-Injection.
          • Dein Select-Befehl sieht etwas seltsam aus: Du fragst "where zahl" und setzt die Zahl in Hochkommata; die gehören aber zu Zeichen.
          • Rows.ToString() ist unüblich, um auf einen einzelnen Wert zu kommen. Das klappt in Deinem Fall, weil Du auch nur einen Wert hast, liefert aber oft nur etwas wie "System.Data.DataRow".

          Deine konkrete Aufgabe löst sich also etwa mit folgendem Verfahren:
          Code:
          //  z.B. im Konstruktor wird der ConnectionString vorbelegt:
          string connstr = "...";
          
          private void button1_Click(object sender, EventArgs e)
          {
              using(OleDbConnection conn = new OleDbConnection(connstr)) {
                  OleDbCommand cmd 
                      = new OleDbCommand("select buchstabe from tabelle1 where zahl = ?", conn);
                  cmd.Parameters.AddWithValue("@zahl", 3);
                  conn.Open();
                  textBox1.Text = (string)cmd.ExecuteScalar();
                  //  conn.Close kann wegen des using-Blocks entfallen
              }
          }
          Zur Einführung kann ich Dir auch OpenBook Visual C# Kap.26 vorschlagen.

          Bitte markiere Code mit dem '#'-Button, das liest sich besser.

          Jürgen

          Comment


          • #6
            danke für die tipps jürgen
            hat mir sehr geholfen
            die hochlomma hatte ich zwar schon entfernt und auf das ExecuteScalar bin ich auch schon gekommen aber ich wusste nicht so genau wie ich es richtig verwende
            Gruß
            mikgne

            Comment

            Working...
            X