fraxym Geschrieben 26. August 2010 Geschrieben 26. August 2010 (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 26. August 2010 von fraxym Zitieren
ToolsDevler Geschrieben 26. August 2010 Geschrieben 26. August 2010 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 Zitieren
streffin Geschrieben 26. August 2010 Geschrieben 26. August 2010 sry, den code les ich nicht in dem Detail als das ich dir ne Antwort geben könnte. Rück wenigstens mal ein bisschen ein und benutz die Code Tags bitte. Gruß Sven Zitieren
ToolsDevler Geschrieben 27. August 2010 Geschrieben 27. August 2010 Um ein Code schön anzuzeigen kann man einfach in der Antwortbox oben auf den "#"-Button drücken. Dann einfach nur noch einfügen (wirste dann sehen). Grüße ToolsDevler Zitieren
fraxym Geschrieben 27. August 2010 Autor Geschrieben 27. August 2010 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#... Zitieren
fraxym Geschrieben 27. August 2010 Autor Geschrieben 27. August 2010 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] } Zitieren
a3quit4s Geschrieben 27. August 2010 Geschrieben 27. August 2010 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. Zitieren
fraxym Geschrieben 27. August 2010 Autor Geschrieben 27. August 2010 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; } } } Zitieren
Empfohlene Beiträge
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.