none
DataReader enthält Ergebnis, liefert aber nichts zurück! RRS feed

  • Frage

  • Hey,

     

    ich hab da ein Problem bei dem ich weder mit der While noch mit einer For-Schleife weiter komme.

    Ein erzeugter DataReader dem eine entsprechende Connection sowie eine hoffentlich Korrekte Query voraus geht, hat 3 von 3 Feldern im Ergebnis. Diese werden aber nicht ausgegeben. VS geht bis zum While Punkt, danach ist Ende er läuft nicht in die Schleife rein:

     

    Hier der Source:

     

     private void tabPage2_Enter(object sender, EventArgs e)
        {
    
    
          string strConnStr = "Data Source=(local);Initial Catalog=BlaFussel;User=**; Pwd=***";
          SqlConnection Conn = new SqlConnection(strConnStr);
          SqlCommand cmd = new SqlCommand();
          cmd.Connection = Conn;
    
          cmd.CommandText = "SELECT Straße, PLZ, Ort FROM tbl_Finanzamt WHERE Finanzamt = '" + txtSetFA.Text + "'";
          try
          {
            Conn.Open();
            SqlDataReader dr = cmd.ExecuteReader();
    
            try
            {
              while (dr.Read())
              {
                txtFaStreet.Text = dr[0].ToString();
                txtFaPLZ.Text = dr[1].ToString();
                txtFaCity.Text = dr[2].ToString();
              }
            }
            catch (Exception ex)
            {
              MessageBox.Show(ex.Message);
            }
            dr.Close();
            Conn.Close();
          }
    
          catch (SqlException ex)
          {
            MessageBox.Show(ex.Message);
          }
    
    

     

    FB_Addon_TelNo{ height:15px !important; white-space: nowrap !important; background-color: #0ff0ff;}

    Donnerstag, 27. Januar 2011 19:12

Antworten

  • Hallo D.,

    also normal solltest Du wegen SQL Injection und anderen sicherheitskritischen Dingen natürlich SqlParameter etc. benutzen.

    Aber das ist hier nicht der Fehler, denn der Code sieht im Prinzip lauffähig aus. (gut, es werden ständig die Textboxen "überschrieben", was natürlich eher wenig Sinn macht - aber es ist wohl nur ein Test).

    Wenn er nicht in die while Schleife hereingeht (und keine Exception passiert) ist es normal einfach so, dass die Abfrage keine Ergebnisse hat!
    Prüfe die Schreibweise der Felder und den Wert der "txtSetFA.Text" zur Zeit der Abfrage!

     

    _____________________________

    Also mit folgendem Code funktioniert es bei mir bei einer Northwind Datenbank (es werden Daten angezeigt):

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    using System.Data.SqlClient;
    
    namespace WinDataReaderDemo
    {
      public partial class Form1 : Form
      {
        public Form1()
        {
          InitializeComponent();
          tabControl1.TabPages[1].Enter += new EventHandler(tabPage2_Enter);
        }
    
        private void tabPage2_Enter(object sender, EventArgs e)
        {
          SqlConnectionStringBuilder sb = new SqlConnectionStringBuilder();
          sb.DataSource = ".";
          sb.InitialCatalog = "Northwind";
          sb.IntegratedSecurity = true;
          string strConnStr = sb.ToString();
          SqlConnection conn = new SqlConnection(strConnStr);
          SqlCommand cmd = new SqlCommand();
          cmd.Connection = conn;
          txtSetFA.Text = "Owner";
    
          cmd.CommandText = "SELECT ContactName, City, Address FROM Contacts " +
            "WHERE ContactTitle = '" + txtSetFA.Text + "'";
          try
          {
            conn.Open();
            SqlDataReader dr = cmd.ExecuteReader();
    
            try
            {
              while (dr.Read())
              {
                txtFaStreet.Text = dr[0].ToString();
                txtFaPLZ.Text = dr[1].ToString();
                txtFaCity.Text = dr[2].ToString();
              }
            }
            catch (Exception ex)
            {
              MessageBox.Show(ex.Message);
            }
            dr.Close();
            conn.Close();
          }
    
          catch (SqlException ex)
          {
            MessageBox.Show(ex.Message);
          }
        }
      }
    }
    
    

     


    ciao Frank
    • Als Antwort markiert Dom2011 Freitag, 28. Januar 2011 19:16
    Donnerstag, 27. Januar 2011 21:11