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

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

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;


            }



        }

}

Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren

Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können

Benutzerkonto erstellen

Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!

Neues Benutzerkonto erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde Dich hier an.

Jetzt anmelden

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...