Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Empfohlene Antworten

Veröffentlicht

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

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

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

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]

}

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 Konto oder melde dich an, um einen Kommentar zu schreiben.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.