Zum Inhalt springen

C# Auf Datenbank zugreifen und Ergebnisse in ListBox anzeigen


Empfohlene Beiträge

Geschrieben (bearbeitet)

Hallo,

ich möchte gern mit meinem Programm eine SQL Datenbank auslesen und die Ergebnisse in einer ListBox ausgeben. Die Verbindungsdaten für die Datenbank werden in der Klasse "SqlVerbindung" angegeben. Das Auslesen geschieht in der Klasse "ExchangeArbeitspakete" und die ListBox befindet sich in der Form ArbeitspaketeView.

Die Verbindung zum SQL-Server (ich verwende Microsoft SQL Server 2005) wird anscheinend aufgebaut, da ich diesbezüglich keine Fehlermeldung mehr bekomme. Jedoch bleibt die ListBox leer.

Hier mein Code:

Klasse SqlVerbindung:

namespace Projektmanagement

{

public class SqlVerbindung

{

public SqlVerbindung()

{

string strCon =@"server=ENTWICKLUNG4\SQLEXPRESS;uid=id;pwd=password;database=Projektmanagement";

con = new SqlConnection(strCon);

}

public SqlConnection con { get; set; }

}

Klasse ExchangeArbeitspakete

namespace Projektmanagement

{

public class ExchangeArbeitspakete

{

public ExchangeArbeitspakete()

{

var verbindung = new SqlVerbindung();

int _Arbeitspaket_ID;

SqlCommand cmd = new SqlCommand("Select Arbeitspaket_ID from Arbeitspakete", verbindung.con);

verbindung.con.Open();

SqlDataReader reader = cmd.ExecuteReader();

while (reader.Read())

{

_Arbeitspaket_ID = reader.GetOrdinal("Arbeitspaket_ID");

var liste = new ArbeitspaketeView();

liste.lst_arbeitspakete.Items.Add(reader.GetSqlGuid(_Arbeitspaket_ID));

}

reader.Close();

verbindung.con.Close();

}

}

}

Code der Form ArbeitspaketeView

namespace Projektmanagement

{

public partial class ArbeitspaketeView : Form

{

public ArbeitspaketeView()

{

InitializeComponent();

}

private void ArbeitspaketeView_Load(object sender, EventArgs e)

{

ExchangeArbeitspakete laden = new ExchangeArbeitspakete();

}

Bearbeitet von fraxym
Geschrieben

Hi,

ich hab deinen Code zwar nur überflogen. Aber mir hat sofort diese markierte Zeile ins Auge gestochen:

...

while (reader.Read())

{

_Arbeitspaket_ID = reader.GetOrdinal("Arbeitspaket_ID");

>>>>>>> var liste = new ArbeitspaketeView();

liste.lst_arbeitspakete.Items.Add(reader.GetSqlGuid(_Arbeitspaket_ID));

}

...

1. Wenn du bei jedem Durchgang mit "new" eine neue Instanz von "ArbeitspaketeView" startest, wird immer alles gelöscht.

2. Du kannst nicht irgendeine Instanz von "ArbeitspaketeView" bearbeiten, sondern genau die, die auch auf deiner GUI angezeigt wird.

(Schau dir dazu bitte das an: Grundlagen: Instanzen)

Am schönsten wäre es IMHO, wenn du ein Event in "ExchangeArbeitspakete" schreibst, und dieses auf der Oberfläche hinzufügst, und dort deine GUI aktualisierst.

Das sollte dir hier weiter helfen (Grundlagen: Events)

Grüße

ToolsDevler

Geschrieben

Ok, danke für die Hinweise. Da sich mein Problem leider immer noch nicht gelöst hat hier nochmal der formatierte Code...

Klasse Sql-Verbindung:


namespace Projektmanagement

{

public class SqlVerbindung

{

public SqlVerbindung()

{

string strCon =@"server=ENTWICKLUNG4\SQLEXPRESS;uid=id;pwd=passw ord;database=Projektmanagement";

con = new SqlConnection(strCon);

}


public SqlConnection con { get; set; }

}


Klasse ExchangeArbeitspakete


namespace Projektmanagement

{

public class ExchangeArbeitspakete

{


public ExchangeArbeitspakete()

{

var verbindung = new SqlVerbindung();

int _Arbeitspaket_ID;


SqlCommand cmd = new SqlCommand("Select Arbeitspaket_ID from Arbeitspakete", verbindung.con);

verbindung.con.Open();


SqlDataReader reader = cmd.ExecuteReader();


while (reader.Read())

{

_Arbeitspaket_ID = reader.GetOrdinal("Arbeitspaket_ID");

var liste = new ArbeitspaketeView();

liste.lst_arbeitspakete.Items.Add(reader.GetSqlGui d(_Arbeitspaket_ID));

}

reader.Close();

verbindung.con.Close();


}


}

}

Klasse ExchangeArbeitspakete

namespace Projektmanagement

{

public class ExchangeArbeitspakete

{


public ExchangeArbeitspakete()

{

var verbindung = new SqlVerbindung();

int _Arbeitspaket_ID;


SqlCommand cmd = new SqlCommand("Select Arbeitspaket_ID from Arbeitspakete", verbindung.con);

verbindung.con.Open();


SqlDataReader reader = cmd.ExecuteReader();


while (reader.Read())

{

_Arbeitspaket_ID = reader.GetOrdinal("Arbeitspaket_ID");

var liste = new ArbeitspaketeView();

liste.lst_arbeitspakete.Items.Add(reader.GetSqlGui d(_Arbeitspaket_ID));

}

reader.Close();

verbindung.con.Close();


}


}

}


Code der Form ArbeitspaketeView

namespace Projektmanagement

{

public partial class ArbeitspaketeView : Form

{

public ArbeitspaketeView()

{

InitializeComponent();

}



private void ArbeitspaketeView_Load(object sender, EventArgs e)

{

ExchangeArbeitspakete laden = new ExchangeArbeitspakete();

} 

Dass das mit der Schleife nicht gut ist, habe ich begriffen. Leider weiß ich noch immer nicht, wie ich auf die ListBox zugreifen kann. Habe mir die beiden Seiten durchgelesen nur leider kriege ich es nicht hin. Bin halt noch ein blutiger Anfänger in C#...

Geschrieben

So auf ein neues...

Klasse Sql-Verbindung:


namespace Projektmanagement

{

[indent]public class SqlVerbindung

{

[indent]public SqlVerbindung()

{

[indent]string strCon =@"server=ENTWICKLUNG4\SQLEXPRESS;uid=id;pwd=passw ord;database=Projektmanagement";

con = new SqlConnection(strCon);[/indent]


}[/indent]


public SqlConnection con { get; set; }

}[/indent]

}


[U]Klasse ExchangeArbeitspakete[/U]


namespace Projektmanagement

{

[indent]public class ExchangeArbeitspakete

{


[indent]public ExchangeArbeitspakete()

{

[indent]var verbindung = new SqlVerbindung();

int _Arbeitspaket_ID;


SqlCommand cmd = new SqlCommand("Select Arbeitspaket_ID from Arbeitspakete", verbindung.con);

verbindung.con.Open();


SqlDataReader reader = cmd.ExecuteReader();


while (reader.Read())

{

[indent]_Arbeitspaket_ID = reader.GetOrdinal("Arbeitspaket_ID");

var liste = new ArbeitspaketeView();

liste.lst_arbeitspakete.Items.Add(reader.GetSqlGui d(_Arbeitspaket_ID));[/indent]


}

reader.Close();

verbindung.con.Close();[/indent]


}[/indent]


}[/indent]

}

Klasse ExchangeArbeitspakete

namespace Projektmanagement

{

[indent]public class ExchangeArbeitspakete

{


[indent]public ExchangeArbeitspakete()

{

var verbindung = new SqlVerbindung();

int _Arbeitspaket_ID;


SqlCommand cmd = new SqlCommand("Select Arbeitspaket_ID from Arbeitspakete", verbindung.con);

verbindung.con.Open();


SqlDataReader reader = cmd.ExecuteReader();


while (reader.Read())

{

[indent]_Arbeitspaket_ID = reader.GetOrdinal("Arbeitspaket_ID");

var liste = new ArbeitspaketeView();

liste.lst_arbeitspakete.Items.Add(reader.GetSqlGui d(_Arbeitspaket_ID));[/indent]


}

reader.Close();

verbindung.con.Close();


}[/indent]


}[/indent]

}


Code der Form ArbeitspaketeView

namespace Projektmanagement

{

[indent]public partial class ArbeitspaketeView : Form

{

[indent]public ArbeitspaketeView()

{

InitializeComponent();

}[/indent]




[indent]private void ArbeitspaketeView_Load(object sender, EventArgs e)

{

[indent]ExchangeArbeitspakete laden = new ExchangeArbeitspakete();[/indent]


} [/indent]

}[/indent]

}

Geschrieben

1. Du vermischst GUI mit DB Zugriffen, das ist generell schonmal schlecht.

2. Erzeugt du beim Lesen der einzelnen Datensaetze jedes mal eine neue Liste, der du dann etwas hinzufuegst.

3. Packt man sowas in eine Methode, nicht in einen Konstruktor.

Geschrieben

So, ich habe es endlich hinbekommen. Danke an euch!

Wenn ihr trotzdem Verbesserungsvorschläge habt, würde ihc mich freuen diese zu hören...

Ich habe die Klasse der Form und die Klasse ExchangeArbeitspakete verändert. Hier der Code.

Klasse ExchangeArbeitspakete


 namespace Projektmanagement

{

    public class ExchangeArbeitspakete

    {


        public ExchangeArbeitspakete()

        {


        }


        public List<Guid> GetAllArbeitspakete()

        {

            var verbindung = new SqlVerbindung();

            int _Arbeitspaket_ID;


            SqlCommand cmd = new SqlCommand("Select Arbeitspaket_ID from Arbeitspakete;", verbindung.con);

            verbindung.con.Open();


            SqlDataReader reader = cmd.ExecuteReader();


            List<Guid> liste = new List<Guid>();


            while (reader.Read())

            {

                _Arbeitspaket_ID = reader.GetOrdinal("Arbeitspaket_ID");

                liste.Add(reader.GetGuid(_Arbeitspaket_ID));


            }

            reader.Close();

            verbindung.con.Close();


            return liste;

        }


    }

}

Und die Form Klasse

namespace Projektmanagement

{

        public partial class ArbeitspaketeView : Form

        {

            public ArbeitspaketeView()

            {

                InitializeComponent();

            }


            private void ArbeitspaketeView_Load(object sender, EventArgs e)

            {

                ExchangeArbeitspakete laden = new ExchangeArbeitspakete();

                var liste = laden.GetAllArbeitspakete();

                lst_arbeitspakete.Items.Clear();

                lst_arbeitspakete.DataSource = liste;


            }



        }

}

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...