van nummertjes naar string in ASP.net / VB.net

Pagina: 1
Acties:

  • BasSpruit
  • Registratie: September 2002
  • Laatst online: 09-04-2022
voordat ik begin ( en iemand anders rare dingen begint te roepen :) )...
taal: ASP.net / VB.net
DB: SQLserver 2000 (die van MS dus)
dotnet framework (2e beta) werkend geinstalleerd op server.
ik hoef niks te weten over connecten met een DB, want dat weet ik al.
het moet ook geen zoekopdracht voorstellen. zie voorbeeld, adres onderaan deze post.

ik heb 2 SQL statements:
code:
1
2
3
 SELECT [TitleID], [Title] FROM [Title]
WHERE [TitleID] IN (SELECT [TitleID] FROM [Videos] WHERE [EpisodeNumber] > 0) 
ORDER BY [Title] ASC;
en een statement waar de bovenste [TitleID] in wordt verwerkt:
code:
1
 SELECT DISTINCT[Episodenumber] FROM [Videos] WHERE [EpisodeNumber] > 0 AND [TitleID] = "&TitleID&";


nu wil ik van het eerste statement een lijst maken (niet moeilijk, kan ik al, is ook niet de vraag).
dat 2e statement echter moet verwerkt worden tot een string, zodat die in de tabel komt te staan.

daar heb ik in klassiek asp een heel mooi (wel zwaar...) script voor:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<% OldEp = rstEpisodes.Fields("EpisodeNumber").Value
        NewEp = OldEp
        TempEp = NewEp
        Do While Not rstEpisodes.EoF
            OldEp = NewEp
            NewEp = Clng(rstEpisodes.Fields("EpisodeNumber").value)
            DiffEp = Clng(NewEp) - Clng(OldEp)
            If DiffEp = 0 Then
                response.write NewEp
            ElseIf Clng(DiffEp) > 1 AND Clng(TempEp) <> Clng(OldEp) Then
                response.write " - " & OldEp & ", " & NewEp
                TempEp = NewEp
            ElseIf Clng(DiffEp) > 1 AND Clng(TempEp) = Clng(OldEp) Then
                response.write ", " & NewEp
                TempEp = NewEp
            End If
        rstEpisodes.MoveNext
        Loop
        If DiffEp = 1 Then
            response.write " - " & NewEp
        End If %>

en dat werkt. vraag is nu: hoe vertaal ik al het bovenstaande naar ASP.net (VB.net)?

als je een voorbeeld wilt zien, zie hier: http://basspruit.sytes.net:8080/ en vraag de episode lijst op. dat heb ik tot nu toe nog steeds gegenereerd met 1 (classieke) asp pagina = van nummertjes 1 string maken.

  • whoami
  • Registratie: December 2000
  • Laatst online: 23:02
Waarom wil je allemaal nummers in een string steken ? Iets doet me vermoeden dat uw datamodel niet helemaal kosjer is....

Wat lukt er trouwens precies niet? Het is niet de bedoeling in P&W dat je hier gewoon code kunt dumpen en dat wij die voor jou gaan gaan omzetten naar ASP.NET. Geef aan wat er precies niet lukt, wat je zelf al hebt, ....

Wil je die nummers gewoon in een string zetten om ze op je webpage te kunnen tonen?
Haal je gewoon alle episode nummers op per titel en ga je ze dan in een string gaan zetten?

Een Integer kan je casten naar een string dmv de functie ToString();

[ Voor 28% gewijzigd door whoami op 12-03-2003 09:26 ]

https://fgheysels.github.io/


  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 20-08 11:40

gorgi_19

Kruimeltjes zijn weer op :9

* gorgi_19 gokt trouwens ook op een flinke mishandeling van je webserver.. :x

Kijk ook eens gelijk naar caching van de resultaten in een datatable en maak deze bijvoorbeeld een uur geldig. Zo hoef je niets steeds deze query op te bouwen.

Deze datatable kan je binden aan een Datagrid. Tegelijk heb je dan sorting en pagina mogelijkheden.

Verder zag ik dat je ook XML klaarzette. Nu je dus ook bij een wijziging in je database het XML-bestand opnieuw creeeren, deze op schijf zetten en deze cachen, met een cache dependancy op dit bestand.
Vervolgs haal je bij een request voor de webpagina de dataset uit de cache (vergeet niet te casten).

[ Voor 45% gewijzigd door gorgi_19 op 12-03-2003 09:53 ]

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • BasSpruit
  • Registratie: September 2002
  • Laatst online: 09-04-2022
whoami schreef op 12 maart 2003 @ 09:23:
Waarom wil je allemaal nummers in een string steken ? Iets doet me vermoeden dat uw datamodel niet helemaal kosjer is....

Wat lukt er trouwens precies niet? Het is niet de bedoeling in P&W dat je hier gewoon code kunt dumpen en dat wij die voor jou gaan gaan omzetten naar ASP.NET. Geef aan wat er precies niet lukt, wat je zelf al hebt, ....

Wil je die nummers gewoon in een string zetten om ze op je webpage te kunnen tonen? - nee
Haal je gewoon alle episode nummers op per titel en ga je ze dan in een string gaan zetten? - ja, maar met een bewerking.

Een Integer kan je casten naar een string dmv de functie ToString();
die ToString() heb ik ook gevonden, ja. die gebruik ik vooral bij cookies. en mijn datamodel is prima koosjer hoor. werkte wel met klassiek asp... :)

wat ik zelf al heb: een datagrid met de eerste query lukt me aardig. en een nested datalist lukt mij ook wel. maar dan krijg ik alle waardes, i.p.v. de DISTINCT waardes.
wat er op de website voor gebruikers te zien valt komt uit een tabel met ge-aggregeerde gegevens (daardoor laad die pg ook veel sneller). alleen een admin krijgt de "zware" PG.
die geaggregeerde gegevens produceerde ik d.m.v. onderstaand script. dat script staat in mijn .asp - bestand in de body (waar de string nodig is). dat gaat dus niet met asp.net.
wat nu de bedoeling is om voor elke regel die ik uit die eerste query krijg een 2e query uit te voeren m.b.v. dat 2e sql-statement. vervolgens moeten de gegevens uit de 2e query bewerkt worden. hoe ik dus telkens dat 2e SQL-statement moet uitvoeren, vat ik nog niet helemaal.

  • BasSpruit
  • Registratie: September 2002
  • Laatst online: 09-04-2022
okee, ik heb er een tijd aan gezeten, maar ik kom er nog niet helemaal (helemaal niet... ?) uit.
ik heb dit scrippie:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
    <script language="VB" runat="server">

Sub Page_Load(Source as Object, E as EventArgs)
    Dim strConn as string = "server=ACW;uid=ACW;pwd=ACW;database=ACW"
    Dim MySQL as string = "SELECT [Title], [TitleID], [Completed], [NumberOfEpisodes] FROM [Serie_Data];"
    Dim MyConn as New SQLConnection(strConn)
    Dim Cmd as New SQLCommand(MySQL, MyConn)
    Dim objTitles as SQLDatareader
    MyConn.Open()
    Dim SQL2, Eps as string
    Dim OldEp, NewEp, TempEp, DiffEp as integer
    objTitles = Cmd.ExecuteReader(system.data.CommandBehavior.CloseConnection)
    while objTitles.read()
        SQL2 = "SELECT [EpisodeNumber] FROM [Episodes] WHERE [TitleID] = " + objTitles("TitleID").ToString() + ";"
        Dim MyConn2 as New SQLConnection(strConn)
        Dim Cmd2 as new SQLCommand(SQL2, MyConn2)
        Dim objEps as SQLDatareader
        MyConn2.Open()
        objEps = Cmd2.ExecuteReader(system.data.CommandBehavior.CloseConnection)
        OldEp = objEps("EpisodeNumber")
        NewEp = OldEp
        TempEp = NewEp
        while objEps.Read()
            OldEp = NewEp
            NewEp = objEps("EpisodeNumber")
            DiffEp = NewEp - OldEp
            If DiffEp = 0 then 
                Eps = Eps + objEps("EpisodeNumber").ToString()
            ElseIf DiffEp > 1 AND TempEp <> OldEp then
                Eps = Eps + "-" + OldEp.ToString() + ", " + NewEp.ToString()
                TempEp = NewEp
            ElseIf DiffEp > 1 AND TempEp = OldEp then
                Eps = Eps.ToString() + ", " + NewEp.ToString()
                TempEp = NewEp
            End if
        end while
        MyConn2.Close()
        If DiffEp = 1 then
            Eps = Eps + "-" + NewEp.ToString()
        End If
        response.Write(Eps + "<br/>" + vbcrlf)
    end while
    MyDataGrid.DataSource = objTitles
    MyDataGrid.DataBind()
End Sub
</script>

en ik krijg de volgende error
Invalid attempt to read when no data is present
Line 27: OldEp = objEps("EpisodeNumber")
ik wil dat ie in die variabele gewoon de eerste waarde uit de recordset haalt. hoe krijg ik dit voor elkaar?

--zonder die buitenste while objTitles.read() doet ie het prima--

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 20-08 11:40

gorgi_19

Kruimeltjes zijn weer op :9

offtopic:
/me vraagt zich eik af waarom je over wil stappen naar ASP.Net. Je hanteert in principe als enige de methodieken van ASP en gaat zo ongeveer dwars in tegen alle goede mogelijkheden van ASP.Net. Ik verwacht ook eigenlijk niet dat je enige performancewinst zal gaan boeken.


Controleer je waarde anders op System.DBNull.Value. Is deze waar, dan kan je hem niet gebruiken.

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • BasSpruit
  • Registratie: September 2002
  • Laatst online: 09-04-2022
punt is dat ik deze variabele hard nodig heb. anders werkt mijn script namelijk niet...

en als het beter kan... ik heb geen flauw idee hoe, ik heb maar een klein beetje ervaring met asp.net / vb.net en heb hiervoor alleen asp/vbscript gedaan. dus wat ik zeg klopt wel met mijn gedachten. maar is (waarschijnlijk) niet van toepassing op asp.net

[ Voor 42% gewijzigd door BasSpruit op 13-03-2003 08:51 ]


  • whoami
  • Registratie: December 2000
  • Laatst online: 23:02
Op welke lijn krijg je die error?

https://fgheysels.github.io/


  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 20-08 11:40

gorgi_19

Kruimeltjes zijn weer op :9

whoami schreef op 13 maart 2003 @ 09:31:
Op welke lijn krijg je die error?
ChaosDream schreef op 12 March 2003 @ 21:08:
en ik krijg de volgende error
code:
1
2
Invalid attempt to read when no data is present
Line 27: OldEp = objEps("EpisodeNumber")


ik wil dat ie in die variabele gewoon de eerste waarde uit de recordset haalt. hoe krijg ik dit voor elkaar?

--zonder die buitenste while objTitles.read() doet ie het prima--
O-)
edit:

/me is een beetje melig. 't is vrijdag donderdag. :+

[ Voor 24% gewijzigd door gorgi_19 op 13-03-2003 10:24 ]

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • whoami
  • Registratie: December 2000
  • Laatst online: 23:02
Mja, logisch. Waarom doe je twee Read() operaties in die lus eigenlijk?

Wat is het probleem:
je doet een read bij de eerste while
daarna ga je in de loop, kom je nog een while tegen en daar ga je opnieuw lezen tot het einde. Als je uit die binnenste while komt, dan is de DataReader dus volledig doorlopen. Echter, je zit nog in die buitenste while, en dus, zal die buitenste conditie 'while dr.read()' nog eens uitgevoerd worden. Echter, je datareader heeft geen data meer te lezen, want hij is al volledig doorlopen, vandaar die error.

https://fgheysels.github.io/


  • BasSpruit
  • Registratie: September 2002
  • Laatst online: 09-04-2022
whoami schreef op 13 March 2003 @ 09:40:
Mja, logisch. Waarom doe je twee Read() operaties in die lus eigenlijk?

Wat is het probleem:
je doet een read bij de eerste while
daarna ga je in de loop, kom je nog een while tegen en daar ga je opnieuw lezen tot het einde. Als je uit die binnenste while komt, dan is de DataReader dus volledig doorlopen. Echter, je zit nog in die buitenste while, en dus, zal die buitenste conditie 'while dr.read()' nog eens uitgevoerd worden. Echter, je datareader heeft geen data meer te lezen, want hij is al volledig doorlopen, vandaar die error.
in dat dingetje dat die error geeft, moet ie het eerste record zetten. dit is dus wat ie NIET wil doen. de dataset is ook niet leeg (tenminste, dat hoort ie niet te zijn) want als ik van die regel een comment maak ( een ' ervoor ) dan voert ie het script netjes uit.

dat 2e statement voer ik uit omdat het 2e SQL statement gebaseerd is op een waarde uit het eerste statement. en voor elke regel output van het eerste statement moet dit worden uitgevoerd. ik wil namelijk een kolom met samenvattende gegevens aanmaken. samen met nog een paar gegevens kan ik op deze manier (in mijn klassieke asp-pagina) in 1 klap 50 records bijwerken.

die samenvattende gegevens presenteer ik op de website. ik kan natuurlijk niet zo`n script op mn website knallen, dan wordt de website erg langzaam.

of bestaat er toevallig een functie (in asp.net of SQL) waarmee ik van een rij nummers een reeks kan maken (voorbeeld staat op mijn site). dat zou wel handig zijn :) http://basspruit.sytes.net:8080/

edit:
/me kon het niet in een keer tijpen... :)
en het is nog maar donderdag hoor :?

[ Voor 17% gewijzigd door BasSpruit op 13-03-2003 09:59 ]


  • whoami
  • Registratie: December 2000
  • Laatst online: 23:02
My bad, ik had iets verkeerd gelezen.

https://fgheysels.github.io/


  • BasSpruit
  • Registratie: September 2002
  • Laatst online: 09-04-2022
whoami schreef op 13 March 2003 @ 10:16:
My bad, ik had iets verkeerd gelezen.
we zijn allemaal maar mens hoor..., dus dat mag O-)
Pagina: 1