none
Werte aus SQL-Datenbanktabelle in Textfelder einlesen RRS feed

  • Frage

  • Hallo, ich hab ein GridView, welches mir die Werte in der Datenbank Zeilenweise anzeigt, jetzt möchte ich das wenn ich eine Zeile durch setzen des Häkchens am Anfang jeder Zeile die Werte nochmals bearbeiten kann. Mein Problem ist nur ich weiß nicht wie ich die Werte in Textfelder einlesen kann. Folgenden Code hab ich:

    protected void GridView1_SelectedIndexChanged(object sender, EventArgs e)
        {
          String conStr = Tankstelle.Properties.Settings.Default.ConnString;
          SqlConnection myConn = new SqlConnection();
          myConn.ConnectionString = conStr;
          myConn.Open();
    
          int slctId = GridView1.SelectedIndex;
          string strqry = "SELECT (Datum, Kennzeichen, KmStand, Liter, PreisLiter, MwSt, Export) FROM DIESEL WHERE ID = '" + slctId + "' ";
          SqlCommand myCom = new SqlCommand(strqry, myConn);
          myCom.ExecuteNonQuery();
          myConn.Close();
        }
    
    Programiersprache ist C#
    Montag, 30. August 2010 18:17

Antworten

  • Hallo Jens,

    du rufst die Methode ExecuteNonQuery() auf, die für Update, Insert und Delete geeignet ist. In deinem Fall möchtest du ja Daten zurückbekommen. Da gibt es verschiedenen Ansätze. Die einfachsten sind mit a) DataReader und mit b) DataSet.

    Mit einem DataReader sähe das ungefähr so aus:

    ...
    SqlCommand myCom = new SqlCommand(strqry, myConn);
    DataReader dr = myCom.ExecuteReader();
    
    while(dr.Read())
    {
     textBox1.Text = dr["Datum"].ToString();
     textBox2.Text = dr["Kennzeichen"].ToString();
     //weitere Zuweisungen...
    }
    
    dr.Close();
    ...

    Ich habe das jetzt nicht in Visual Studio ausprobiert. Grundsätzlich liegt dein Fehler darin, dass du das Ergebnis der SELECT-Abfrage nirgendwo entgegengenommen hast und daher auch nicht auf die Werte zugreifen kannst. Das mit dem DataReader klappt so übrigens nur bei einem zurückgegebenen Datensatz, da die TextBoxen in der Schleife ja sonst immer wieder überschrieben werden. Falls du mehrere Datensätze geliefert bekommst, solltest du ein DataSet nehmen.

    Viele Grüße

    Jan

     

    Montag, 30. August 2010 21:08
  • Hallo Jens,

    bzgl. "ASP.NET-Gruppe" ... die Bindungs-Techniken sind vor allem unterschiedlich in die einzelnen Technologien. Im Silverlight-Szenario würde man bspw. nicht das DataSet wählen etc..

    Aber hier ggf. ein Artikel, der Dir Möglichkeiten dazu aufzeigen kann:

    [Editable Gridview with Textbox, CheckBox, Radio Button and DropDown List - CodeProject]
    http://www.codeproject.com/KB/webforms/editable_gridview_control.aspx

    Ich kann auch nur empfehlen, Bindungen zu benutzen.


    ciao Frank
    Dienstag, 31. August 2010 06:35
  • Hallo,

    schau dir deine Select Abfrage nochmal an.

    Du hast kein "from" darin stehen.

    Das Programm weiß also gar nicht, von welcher Tabelle die Daten

    kommen sollen. Richtig sollte das so aussehen:

     string strqry = "SELECT (Datum, Kennzeichen, KmStand, Liter, PreisLiter, MwSt, Export) FROM Tabellenname WHERE ID = '" + slctId + "' ";

    Gruß

    Volker

     

    Dienstag, 31. August 2010 19:08

Alle Antworten

  • Hallo J.,

    Da Du mit dem GridView ein ASP.NET Steuerelement-Frage meinst, solltest Du die Frage in der [ASP.NET Gruppe] stellen.


    ciao Frank
    Montag, 30. August 2010 18:49
  • Ich denkmal, das GridView ist nebensächlich, es geht ja mehr darum das meine SQL Abfrage Werte in die Textfelder schreibt, oder so ähnlich.
    _____________________
    Jens Wedekind
    Montag, 30. August 2010 18:57
  • Hallo Jens,

    du rufst die Methode ExecuteNonQuery() auf, die für Update, Insert und Delete geeignet ist. In deinem Fall möchtest du ja Daten zurückbekommen. Da gibt es verschiedenen Ansätze. Die einfachsten sind mit a) DataReader und mit b) DataSet.

    Mit einem DataReader sähe das ungefähr so aus:

    ...
    SqlCommand myCom = new SqlCommand(strqry, myConn);
    DataReader dr = myCom.ExecuteReader();
    
    while(dr.Read())
    {
     textBox1.Text = dr["Datum"].ToString();
     textBox2.Text = dr["Kennzeichen"].ToString();
     //weitere Zuweisungen...
    }
    
    dr.Close();
    ...

    Ich habe das jetzt nicht in Visual Studio ausprobiert. Grundsätzlich liegt dein Fehler darin, dass du das Ergebnis der SELECT-Abfrage nirgendwo entgegengenommen hast und daher auch nicht auf die Werte zugreifen kannst. Das mit dem DataReader klappt so übrigens nur bei einem zurückgegebenen Datensatz, da die TextBoxen in der Schleife ja sonst immer wieder überschrieben werden. Falls du mehrere Datensätze geliefert bekommst, solltest du ein DataSet nehmen.

    Viele Grüße

    Jan

     

    Montag, 30. August 2010 21:08
  • Hallo Jens,

    bzgl. "ASP.NET-Gruppe" ... die Bindungs-Techniken sind vor allem unterschiedlich in die einzelnen Technologien. Im Silverlight-Szenario würde man bspw. nicht das DataSet wählen etc..

    Aber hier ggf. ein Artikel, der Dir Möglichkeiten dazu aufzeigen kann:

    [Editable Gridview with Textbox, CheckBox, Radio Button and DropDown List - CodeProject]
    http://www.codeproject.com/KB/webforms/editable_gridview_control.aspx

    Ich kann auch nur empfehlen, Bindungen zu benutzen.


    ciao Frank
    Dienstag, 31. August 2010 06:35
  • Hallo, so Richtig will es noch nicht.
    	  int slctId = GridView1.SelectedIndex;
          string strConn = ConfigurationManager.ConnectionStrings["TankDBConnectionString"].ConnectionString;
          string strqry = "SELECT (Datum, Kennzeichen, KmStand, Liter, PreisLiter, MwSt, Export) WHERE ID = '" + slctId + "' ";
    
          SqlConnection myConn = new SqlConnection(strConn);
          myConn.Open();
          SqlCommand myCom = new SqlCommand(strqry, myConn);
          SqlDataReader dr = myCom.ExecuteReader(); //HIER in der Nähe ist ein Fehler
          
          while (dr.Read())
          {
            //Calendar1.SelectedDate = dr["Datum"].ToString();
            DropDownList1.SelectedItem.Text = dr["Kennzeichen"].ToString();
            //weitere Zuweisungen...
          }
    
          dr.Close();
          myConn.Close();
    
    Wenn ich in der Website auf "Auswählen" ( 1.Spalte im GridView ) klicke, dann bekomm ich die Fehlermeldung, das in der Zeile "SqlDataReader dr = myCom.ExecuteReader(); " in der Nähe von ";" ein Fehler ist.
    Jens Wedekind
    Dienstag, 31. August 2010 15:08
  • Hallo,

    schau dir deine Select Abfrage nochmal an.

    Du hast kein "from" darin stehen.

    Das Programm weiß also gar nicht, von welcher Tabelle die Daten

    kommen sollen. Richtig sollte das so aussehen:

     string strqry = "SELECT (Datum, Kennzeichen, KmStand, Liter, PreisLiter, MwSt, Export) FROM Tabellenname WHERE ID = '" + slctId + "' ";

    Gruß

    Volker

     

    Dienstag, 31. August 2010 19:08