Toon posts:

[C#.NET]foreach result in query

Pagina: 1
Acties:
  • 140 views sinds 30-01-2008
  • Reageer

Verwijderd

Topicstarter
Ik ben bezig aan het maken van een webservice voor een project. Die webservice moet op basis van een volgnummer alle informatie over een persoon teruggeven.

De basis is al gelukt: voornaam, achternaam,... krijg ik goed terug.
Nu zit ik met een probleem omtrent de telefoonnummers. Ik heb mijn database zodanig gemaakt dat ik in principe oneindig veel telefoonnummers kan bijhouden per persoon. Ik slaag er in om al die telefoonnummers op te vragen, maar nu wil ik die dus allemaal gaan opslagen in een ArrayList en daar zit ik met een probleem:

in MedewerkerTelefoon is de SqlDataReader die alle telefoonnummers bevat. Nu wil ik graag een soort "foreach string nummer in MedewerkerTelefoon" loop maken zodat ik alle nummers kan opslaan...alleen weet ik niet goed hoe ik dit moet doen. Ik heb zo het gevoel dat er nog iets achter die MedewerkerTelefoon moet komen om goed te werken maar zou niet weten wat. Hopelijk verstaan jullie mijn probleem en kunnen jullie een beetje helpen.

  • Orphix
  • Registratie: Februari 2000
  • Niet online
MSDN info over SqlDataReader

Als ik het goed begrijp wil je simpelweg itereren over de records via de datareader? Dat kan met reader.Read() deze selecteert het volgende record en geeft een boolean true terug zolang er nog records zijn. Je kan dan via de [] operator de waardes opgeven, via een index getal, of via het veldnaam. Dus reader[1] of reader["TelefoonNummer"].

Verwijderd

Topicstarter
Heb even wat zitten uitproberen op basis van het voorgaande:
code:
1
2
3
4
5
6
7
8
9
ArrayList telefoonnummers = new ArrayList();
sqlCmd.CommandText = "SELECT Telefoonnummer FROM Telefoonnummers WHERE GSM = 0 AND FAX = 0 AND Volgnummer = '" + Volgnummer + "'";
SqlDataReader MedewerkerTelefoon = sqlCmd.ExecuteReader();
int i = 0;
while (MedewerkerTelefoon.Read())
{
     telefoonnummers.Add(MedewerkerTelefoon.GetString(i));
     i++;
}

Dit compileert zonder problemen maar werkt niet. De fout moet ergens in de while-loop zitten (de rest heb ik al getest en werkt naar behoren). Waar zit mijn fout?

  • noNamer
  • Registratie: Juli 2000
  • Niet online
Probeer dit is:

code:
1
2
3
4
5
ArrayList telefoonnummers = new ArrayList();
sqlCmd.CommandText = "SELECT Telefoonnummer FROM Telefoonnummers WHERE GSM = 0 AND FAX = 0 AND Volgnummer = '" + Volgnummer + "'";
SqlDataReader MedewerkerTelefoon = sqlCmd.ExecuteReader();
while (MedewerkerTelefoon.Read())
     telefoonnummers.Add((string) MedewerkerTelefoon["Telefoonnummer"]);


Niet getest, maar klopt zo volgens mij wel.

  • Remco
  • Registratie: Januari 2001
  • Laatst online: 13-05 08:20
Het is geen C#, maar vb.net en dit werkt wel:
Visual Basic:
1
2
3
4
5
6
7
8
9
10
Dim reader As SqlDataReader
        Dim cmd As New SqlCommand("SELECT functie FROM t_functie order by functie", Connectie)
        reader = cmd.ExecuteReader
        i = 0
        While reader.Read
            ReDim Preserve functies_list(i)
            functies_list(i) = reader.Item("functie")
            i = i + 1
        End While
        Connectie.Close()

The best thing about UDP jokes is that I don't care if you get them or not.


  • _Thanatos_
  • Registratie: Januari 2001
  • Laatst online: 06-03 20:19

_Thanatos_

Ja, en kaal

Als ik jou was zou ik sowieso geen ArrayList in een webservice teruggeven, omdat het voor de ontvanger dan niet gespecificeerd is welke objecten er nou in zitten. Ik zou gewoon een doodnormale array van telefoonnummers teruggeven (alhoewel dat iets lastiger is, omdat je niet kan appenden aan een normale array).

日本!🎌


  • whoami
  • Registratie: December 2000
  • Laatst online: 23:21
_Thanatos_ schreef op zaterdag 26 februari 2005 @ 18:12:
Als ik jou was zou ik sowieso geen ArrayList in een webservice teruggeven, omdat het voor de ontvanger dan niet gespecificeerd is welke objecten er nou in zitten. Ik zou gewoon een doodnormale array van telefoonnummers teruggeven (alhoewel dat iets lastiger is, omdat je niet kan appenden aan een normale array).
Je kan wel alles appenden aan een arraylist, en dan deze als array van een bepaald type teruggeven:

code:
1
(MyObjectType[])theArrayList.ToArray (typeof(MyObjectType));
Verwijderd schreef op zaterdag 26 februari 2005 @ 16:37:
Heb even wat zitten uitproberen op basis van het voorgaande:
code:
1
2
3
4
5
6
7
8
9
ArrayList telefoonnummers = new ArrayList();
sqlCmd.CommandText = "SELECT Telefoonnummer FROM Telefoonnummers WHERE GSM = 0 AND FAX = 0 AND Volgnummer = '" + Volgnummer + "'";
SqlDataReader MedewerkerTelefoon = sqlCmd.ExecuteReader();
int i = 0;
while (MedewerkerTelefoon.Read())
{
     telefoonnummers.Add(MedewerkerTelefoon.GetString(i));
     i++;
}

Dit compileert zonder problemen maar werkt niet. De fout moet ergens in de while-loop zitten (de rest heb ik al getest en werkt naar behoren). Waar zit mijn fout?
Ik begrijp niet goed wat je hier mee wilt bereiken, je gaat iedere keer het volgende veld gaan uitlezen:
het eerste veld van het eerste record, het tweede veld van het tweede record, het 3de veld van het 3de record, etc....

Trouwens, ipv je query mbhv string concatenation op te bouwen, kijk je beter eens naar parametrized queries (ja, ik val in herhaling. :P)

[ Voor 48% gewijzigd door whoami op 26-02-2005 18:55 ]

https://fgheysels.github.io/


  • pjvandesande
  • Registratie: Maart 2004
  • Laatst online: 01-05 19:09

pjvandesande

GC.Collect(head);

whoami schreef op zaterdag 26 februari 2005 @ 18:53:
Trouwens, ipv je query mbhv string concatenation op te bouwen, kijk je beter eens naar parametrized queries (ja, ik val in herhaling. :P)
P&W FAQ - SQL

Dit moet werken:
C#:
1
2
3
4
5
6
7
8
9
10
ArrayList telefoonnummers = new ArrayList();
sqlCmd.CommandText = "SELECT Telefoonnummer FROM Telefoonnummers WHERE GSM = 0 AND FAX = 0 AND Volgnummer = '" + Volgnummer + "'";
SqlDataReader MedewerkerTelefoon = sqlCmd.ExecuteReader();

while (MedewerkerTelefoon.Read())
{
     telefoonnummers.Add(MedewerkerTelefoon.GetString(0));
}

return (string[])telefoonnummers.ToArray(typeof(string);

  • Sebazztiaan
  • Registratie: Februari 2002
  • Laatst online: 21-04 16:53

Sebazztiaan

sebas!

Je zou het ook op een andere manier kunnen doen, voor bijvoorbeeld een geldvoorbeeldje, dit zet al je results uit je query als resultaten in een listbox, en plaatst een xml file op je hdd!

C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
SqlCommand sqlCMD = new SqlCommand(this.strQuery, this._connection);
SqlDataAdapter sda = new SqlDataAdapter(sqlCMD);
DataSet dsResult = new DataSet("result");
sda.Fill(dsResult);

foreach(DataRow dr in this.dsResult.Tables[0].Rows)
{
      Double dBla = Double.Parse(dr["ColumnName"].ToString());
      String strMoney = bBla.ToString("c");
      this._listBox.Items.Add(strMoney);
}

this.dsResult.WriteXML("money.xml");

[ Voor 33% gewijzigd door Sebazztiaan op 28-02-2005 10:48 ]

Pagina: 1