SQL-Abfrage über mehrere Felder? Was mache ich bei einer List<string> falsch?
-
Dienstag, 7. August 2012 20:04
Hi,
ich habe folgendes Problem:
Gegeben ist die Tabelle tbl_Members und die Form frmMemberBooking.
frmMemberBooking verfügt über eine ComboBox in der die ID sowie Vor- und Nachname des Members angezeigt werden sollen - und zwar für jedes verfügbare Mitglied.
Jetzt hapert es entweder an meiner Logik oder, und das ist wahrscheinlicher an meinen Kenntnissen.
Wenn ich die Abfrage
"SELECT ID, Vorname, Nachname FROM tbl_Members"
in einem DataReader abfeuer und jetzt einer neuen List<string> die Items entsprechend zuordne, dann nimmt er mir nur die ID, das macht derweilen Sinn bei
rdrGetMembersToList[LIndex].ToString();
LIndex steht für einen INT der am Ende der While Schleife hochgezählt wird.
Nun wäre die Frage, wie löse ich das Ganze vernünftig?Hier der Source der Funktion:
public List<string> getMembersToList() { List<string> retMembers = new List<string>(); int LIndex = 0; try { SqlConnection conGetMembersToList = new SqlConnection(wwsnRegistry.readRegistry("Database")); SqlCommand cmdGetMembersToList = new SqlCommand("SELECT ID, Vorname, Nachname FROM tbl_Mitglieder", conGetMembersToList); conGetMembersToList.Open(); SqlDataReader rdrGetMembersToList = cmdGetMembersToList.ExecuteReader(); while (rdrGetMembersToList.Read()) { retMembers.Add(rdrGetMembersToList[LIndex].ToString()); } return retMembers; } catch (SqlException ex) { throw ex; } }Danke schonmal, bin gewiss nur Blind oder übersehe den Fehler als Solches komplett.
C# und VB.NET sind wie eine Schachtel Pralinen, ich weiß nie was ich bekomme xD
- Bearbeitet Dom2011 Dienstag, 7. August 2012 20:10
Alle Antworten
-
Dienstag, 7. August 2012 23:08
Hi,
was soll da auch anderes passieren. Du liest ja auch immer nur die erste Spalte aus.
retMembers.Add( rdrgetMembersToList( "Vorname" ) )
würde den Vornamen in die Liste einfügen. Da Du ja aber drei Spalten zuweisen willst, brauchst Du eine eigene Klasse, die diese Werte aufnehmen kann.
Erstell also eine Klasse "Mitglied" und bau dort drei Eigenschaften (ID, Vorname und Nachname, jeweils mit dem passenden Datentyp) ein. retMembers wird dann zu List<Mitglied> anstelle von List<string>.
Innerhalb der Schleife kannst Du dann per:
retMembers.Add( new Mitglied( rdrgetMembersToList( "ID" ), rdrgetMembersToList( "Vorname" ), rdrgetMembersToList( "Nachname" ) )
die Liste füllen (passenden Konstruktor anlegen, damit Du per new Mitglied( ... ) die Werte direkt zuweisen kannst).
Gruß, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET
http://www.asp-solutions.de/ - Consulting, Development
http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community- Als Antwort markiert Robert BreitenhoferMicrosoft Contingent Staff, Moderator Dienstag, 2. Oktober 2012 14:59
-
Freitag, 10. August 2012 11:13
nur zur Verdeutlichung:
>>LIndex steht für einen INT der am Ende der While Schleife hochgezählt wird.
while (rdrGetMembersToList.Read()) { retMembers.Add(rdrGetMembersToList[LIndex].ToString()); }
da wird nichts hochgezählt. Deshalb bleibt LIndex immer =0
alternativ kannst du diese Daten auch in eine DataTable einfügen, aber dazu weiss man zu wenig was du mit den Daten alles machen willst...
- Als Antwort markiert Robert BreitenhoferMicrosoft Contingent Staff, Moderator Dienstag, 2. Oktober 2012 14:59
-
Dienstag, 2. Oktober 2012 14:59Besitzer
Hallo Dom2011,
Ich gehe davon aus, dass die Antworten Dir weitergeholfen haben.
Solltest Du noch "Rückfragen" dazu haben, so gib uns bitte Bescheid.Grüße,
RobertRobert Breitenhofer, MICROSOFT
Bitte haben Sie Verständnis dafür, dass im Rahmen dieses Forums, welches auf dem Community-Prinzip „Entwickler helfen Entwickler“ beruht, kein technischer Support geleistet werden kann oder sonst welche garantierten Maßnahmen seitens Microsoft zugesichert werden können.

