[VB.NET] Row dynamisch bepalen met datareader

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

  • CaptBiele
  • Registratie: Juni 2002
  • Laatst online: 23-05 16:11

CaptBiele

No Worries!

Topicstarter
Ik gebruik een datareader om snel een enkele row terug te krijgen als result. Deze row (met de columnheaders) wil ik graag tonen als twee kolommen.

Nu weet ik dat het eenvoudig is om zelf een HTML tabelletje in elkaar te knutselen, dat ik vantevoren de Columnheaders bepaal, en vervolgens door de datareader loop om de bijbehorende waarden in te vullen.

Maar ik wil nu graag een generieke oplossing waarbij ik niet vantevoren de juiste structuur van de tabel in HTML vorm hoef te weten.

Dus kan ik zeg maar "dynamisch" de columnheaders bepalen en zo de twee rows tonen als kolommen?

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 17:50

gorgi_19

Kruimeltjes zijn weer op :9

Een datagrid gebruiken en autogenerate columns op true zetten, en vervolgens de datareader binden aan het datagrid?

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • CaptBiele
  • Registratie: Juni 2002
  • Laatst online: 23-05 16:11

CaptBiele

No Worries!

Topicstarter
ah, ik wist niet eens dat er zo`n property bestond. Klinkt goed... ik ga er ff mee testen. :)

  • CaptBiele
  • Registratie: Juni 2002
  • Laatst online: 23-05 16:11

CaptBiele

No Worries!

Topicstarter
Ehm, ik d8 dat het niet zo moeilijk was, maar het lukt me niet. Ik word er helemaal gek van.
Ik kan de datagrid wel aan een dataset koppelen, en ik kan een property van de datareader uitlezen, maar het lukt me niet om de datareader aan de datagrid te koppelen. 8)7

Dit heb ik tot nu toe:
Visual Basic .NET:
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
    Public Sub showProjectInfo()
        '***************************************
        'Function:  This sub prints the information of the selected project
        '***************************************
        Dim ProjectID As String = Request.QueryString.Item("project")

        Try
            'Establish connection to database
            cnn.ConnectionString() = "xxxxxxxxxx"
            cnn.Open()

            'Create and specify command 
            cmd = cnn.CreateCommand
            cmd.CommandText = "SELECT * FROM iProject WHERE ProjectID = " & ProjectID

            'Open datareader 
            dreader = cmd.ExecuteReader(CommandBehavior.SingleRow)
            Response.Write(dreader.FieldCount) //toont 5

            'Bind datareader to datagrid and display info
            dgInfo.DataSource = dreader
            dgInfo.DataBind()

        Catch ex As Exception
            'If any error occurs: display message
            Response.Write("Error: " & ex.Source & ": " & ex.Message)
        Finally
            'Close datareader and connection to database
            dreader.Close()
            cnn.Close()

            'Free all resources that are being used for the connection
            If Not cnn Is Nothing Then
                cnn.Dispose()
            End If
        End Try


Ik heb geen idee wat ik fout doe. Ik heb het geprobeerd zo simpel mogelijk te houden maar mijn datagrid wordt gewoon niet getoond. Lijkt me dat ie leeg is...

  • whoami
  • Registratie: December 2000
  • Laatst online: 23:32
oei, kwetsbare code. Je kunt misschien eens naar parametrized queries kijken.
Ik kan er nu nl. voor zorgen dat je een tabel kwijt zult zijn.

Daarnaast vind ik het ook geen goed idee om een datareader in je webpagina te gebruiken. Je kunt beter je applicatie volgens een n-tier model opzetten, en die datareader in de data-layer gebruiken om een custom arraylist oid te returnen.

Waarom geef je daar trouwens een singlerow commandbehavior mee?

https://fgheysels.github.io/


  • CaptBiele
  • Registratie: Juni 2002
  • Laatst online: 23-05 16:11

CaptBiele

No Worries!

Topicstarter
whoami, tnx voor je opbouwende kritiek. Ik weet dat het nog niet helemaal nette code is, maar ik heb er nog niet zo veel ervaring mee, en wil het eigenlijk eerst aan de praat hebben voordat ik dingen kan gaan verbeteren en optimaliseren.

Maar je wilt dus zeggen dat als ik de waardes in een array zet, en dan gebruik voor presentatie het wel netter is?

Die singleRow heb ik meegegeven omdat ik weet dat ik maar een enkele row terug krijg. Dat is beter voor de performance. :)

  • whoami
  • Registratie: December 2000
  • Laatst online: 23:32
CaptBiele schreef op 17 april 2004 @ 15:20:

Maar je wilt dus zeggen dat als ik de waardes in een array zet, en dan gebruik voor presentatie het wel netter is?
Ik bedoel dat het beter is om al je database-stuff code (selects, inserts, update, etc...) in een ander project te steken, en dat je dan de classes van dat project gebruikt binnen je webpagina.
Op die manier kan je ook die classes gebruiken als je een winform-applicatie maakt voor dezelfde DB.
Kijk anders eens in het 'Patterns & Practices' gedeelte van de MSDN, en zoek eens naar n-tier architecture. Je vindt er zeker eea over.

Lees ook dit eens.

[ Voor 8% gewijzigd door whoami op 17-04-2004 15:35 ]

https://fgheysels.github.io/


  • CaptBiele
  • Registratie: Juni 2002
  • Laatst online: 23-05 16:11

CaptBiele

No Worries!

Topicstarter
ja ok, het gebruik van classes valt dus onder het later verbeteren en optimaliseren.

Ik heb in mijn applicatie geen texten of velden die een gebruiker kan wijzigen. Ik toon informatie aan de hand van geselecteerde items in een tree folder. Maar ik denk dat het sowieso netter is om parameterized queries te gebruiken (ook omdat apen misschien kwaadwillende code in een url kunnen stoppen?).

En bedankt voor mijn inspiratie naar het zoeken van deze link.

Ik ga nu proberen om de resultaten in een array te pompen, en dan lees ik het artikel wel als ik me verveel of zo (lees: als ik werk)

[ Voor 1% gewijzigd door CaptBiele op 17-04-2004 15:58 . Reden: gebruik van tags ]


  • whoami
  • Registratie: December 2000
  • Laatst online: 23:32
CaptBiele schreef op 17 april 2004 @ 15:57:
Ik heb in mijn applicatie geen texten of velden die een gebruiker kan wijzigen.
What 'bout die querystring?
misschien kwaadwillende code in een url kunnen stoppen?).
ja dus.
Ik ga nu proberen om de resultaten in een array te pompen, en dan lees ik het artikel wel als ik me verveel of zo (lees: als ik werk)
Hmmm, dat hoeft niet hoor.
Normaal gezien moet het met die datareader ook wel werken, je kan natuurlijk ook altijd eens met een datatable testen (die je filled mbhv een data-adapter).

https://fgheysels.github.io/


  • CaptBiele
  • Registratie: Juni 2002
  • Laatst online: 23-05 16:11

CaptBiele

No Worries!

Topicstarter
bleh, ik geef het op voor vandaag. Volgens mij kan ik niet meer helder nadenken hoor. Ik ben al twee uur bezig om die stomme row in een array te krijgen :(

Ik krijg resultaten die op een bug duiden, maar het zal wel aan mezelf liggen. Ik ga naar bed. Tis al laat genoeg .... (tis hier al 1 uur snachts :) )

  • whoami
  • Registratie: December 2000
  • Laatst online: 23:32
Probeer het eerst eens op de makkelijke manier: doe het eens met een datatable.
Vul een datatable mbhv een dataadapter, en bindt die datatable eens aan die datagrid.
Normaal moet het eigenlijk ook met een datareader werken hoor.

https://fgheysels.github.io/


  • CaptBiele
  • Registratie: Juni 2002
  • Laatst online: 23-05 16:11

CaptBiele

No Worries!

Topicstarter
ja ik heb het al aan de praat gehad met een datatable. En ik kreeg zelfs de resultaten in de datagrid. Maar ik wou nou juist de datareader implementeren omdat die sneller is, en genoeg functionaliteit biedt.

Maar op een of andere manier lukt het niet, en omdat het wel met de datatable lukte, ben ik 10x zo gefrustreerd. Captain Bieluh has lost it to...

  • whoami
  • Registratie: December 2000
  • Laatst online: 23:32
CaptBiele schreef op 17 april 2004 @ 17:13:
ja ik heb het al aan de praat gehad met een datatable. En ik kreeg zelfs de resultaten in de datagrid. Maar ik wou nou juist de datareader implementeren omdat die sneller is, en genoeg functionaliteit biedt.
MJah... sneller.... Het is wel wat sneller, maar ik vind het zowiezo geen goed idee om datareaders in je client - code te gebruiken.

Ik heb het net ook ff geprobeerd met een datareader, en dit lukt me wel:

code:
1
2
3
4
5
6
7
8
9
10
SqlConnection conn = new SqlConnection (".....");
SqlCommand cmd = new SqlCommand ("SELECT * FROM tblKlant, conn);

SqlDataReader r = cmd.ExecuteReader();

DataGrid1.DataSource = r;
DataGrid1.DataBind();

r.Close();
conn.Close();


Ben je wel zeker dat je SqlDataReader informatie bevat? Probeer het eens zonder where clause, dus geef eens alle records terug die in de tabel zitten, etc....

https://fgheysels.github.io/


  • CaptBiele
  • Registratie: Juni 2002
  • Laatst online: 23-05 16:11

CaptBiele

No Worries!

Topicstarter
Ja het vreemde is dat ik wel rechtstreeks de waarden kan printen, dus bijvoorbeeld zo:

code:
1
2
3
4
5
while dReader.Read()
  response.write(dReader.getString(0))
  response.write(dReader.getString(1))
  etc
end while


maar ik krijg ze gek genoeg niet in een array. Dan krijg ik een melding dat het resultaat leeg is.

Ehm, ik heb hier allerlei spanningsfluctuaties in het appartementje (in Melbourne) waardoor apparaten op hol slaan. Ik zet nu voor de zekerheid mijn pc uit en zal morgen pas weer reageren. 8)7

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 17:50

gorgi_19

Kruimeltjes zijn weer op :9

Je gebruikt toch niet 2x dezelfde datareader he? Datareader is readonly, forward only.

[ Voor 29% gewijzigd door gorgi_19 op 17-04-2004 17:50 ]

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • CaptBiele
  • Registratie: Juni 2002
  • Laatst online: 23-05 16:11

CaptBiele

No Worries!

Topicstarter
Ik weet dat die Read only and forward only is, maar zo doorloop ik de verschillende kolommen in de resultset. (ik gebruik dus maar een reader, imo)

  • whoami
  • Registratie: December 2000
  • Laatst online: 23:32
CaptBiele schreef op 17 april 2004 @ 17:53:
Ik weet dat die Read only and forward only is, maar zo doorloop ik de verschillende kolommen in de resultset. (ik gebruik dus maar een reader, imo)
Ja, maar na je while loopje, waarmee je de results print, staat die reader wel op 't einde, en kan hij natuurlijk niets meer tonen in je grid.

https://fgheysels.github.io/


  • CaptBiele
  • Registratie: Juni 2002
  • Laatst online: 23-05 16:11

CaptBiele

No Worries!

Topicstarter
nee dat snap ik ook wel. Maar dit was een methode die wel werkt. Als ik de datagrid probeer gebruik ik deze code natuurlijk niet.

Vandaag met frisse moed een nieuwe poging....

  • CaptBiele
  • Registratie: Juni 2002
  • Laatst online: 23-05 16:11

CaptBiele

No Worries!

Topicstarter
Ik heb je stuk over de parameterized queries gelezen, en als ik het goed begrijp zit het stuk veiligheid erin dat de types en aantal parameters moet kloppen?
Maar de info wordt wel nog steeds via de url verstuurd?

Heb er al een aantal stukken over gelezen maar die beschrijven bijna allemaal het nut. Ga nog verder zoeken naar een goed voorbeeld.

  • whoami
  • Registratie: December 2000
  • Laatst online: 23:32
CaptBiele schreef op 19 april 2004 @ 08:35:
[...]

Ik heb je stuk over de parameterized queries gelezen, en als ik het goed begrijp zit het stuk veiligheid erin dat de types en aantal parameters moet kloppen?
Parametrized queries zorgen er ook voor dat je SQL injection vermijdt.
quotes ed. worden ook automatisch ge-escaped.

https://fgheysels.github.io/


  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 17:50

gorgi_19

Kruimeltjes zijn weer op :9

CaptBiele schreef op 19 april 2004 @ 08:35:
Maar de info wordt wel nog steeds via de url verstuurd?
Ook de querystring geldt als clientside input en moet nooit vertrouwd worden, imho. Parametrized queries, welke invoer van de querystring accepteren, zorgen iig voor dat er geen SQL Injection attack kan plaatsvinden.

Dit wil echter niet zeggen dat de ingevoerde data ook geldig is.

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • CaptBiele
  • Registratie: Juni 2002
  • Laatst online: 23-05 16:11

CaptBiele

No Worries!

Topicstarter
En wat gebeurt er als iemand nu een SQL statement heeft zonder quotes, bijvoorbeeld: shutdown ?

Verder heb ik nu dit probeersel, geinspireerd door jouw voorbeeld:
Visual Basic .NET:
1
2
3
4
5
cmd = cnn.CreateCommand
cmd.CommandText = "SELECT * FROM iProject WHERE ProjectID = @p_PID"
cmd.Parameters.Add("@p_PID", OdbcType.Int)
cmd.Parameters("@p_PID").Value = Request.QueryString.Item("project")
dreader = cmd.ExecuteReader


Maar ik krijg niets meer terug, dus er wordt iets niet goed doorgegeven, duh..

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 17:50

gorgi_19

Kruimeltjes zijn weer op :9

En wat gebeurt er als iemand nu een SQL statement heeft zonder quotes, bijvoorbeeld: shutdown ?
Afhankelijk van het veldtype wordt deze opgeslagen of wordt er een foutmelding gegeven. Maar probeer het anders eens uit?

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • whoami
  • Registratie: December 2000
  • Laatst online: 23:32
CaptBiele schreef op 19 april 2004 @ 09:31:
En wat gebeurt er als iemand nu een SQL statement heeft zonder quotes, bijvoorbeeld: shutdown ?

Verder heb ik nu dit probeersel, geinspireerd door jouw voorbeeld:
Visual Basic .NET:
1
2
3
4
5
cmd = cnn.CreateCommand
cmd.CommandText = "SELECT * FROM iProject WHERE ProjectID = @p_PID"
cmd.Parameters.Add("@p_PID", OdbcType.Int)
cmd.Parameters("@p_PID").Value = Request.QueryString.Item("project")
dreader = cmd.ExecuteReader


Maar ik krijg niets meer terug, dus er wordt iets niet goed doorgegeven, duh..
Moet je die variable die je uit je querystring haalt, niet eerst naar een integer converten?
code:
1
cmd.Parameters["@p_id"].Value = Convert.ToInt32 (Request.QueryString ....);

https://fgheysels.github.io/


  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 17:50

gorgi_19

Kruimeltjes zijn weer op :9

Je gaat nu impliciet casten, wat op zich ook geen problemen oplevert. Minder netjes, werkt wel. :)

Sowieso vind ik het eik best wel inflexibel om een querystringwaarde op deze plaats te gebruiken en niet de code in een method te plaatsen en ProjectID als parameter mee te geven.

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • CaptBiele
  • Registratie: Juni 2002
  • Laatst online: 23-05 16:11

CaptBiele

No Worries!

Topicstarter
ehm, zelfs als ik Convert.ToInt32 gebruik werkt het niet. Er moet iets anders fout zijn...
(ik ga ff wat variabelen printen om de param te testen)

gorgi: Ik gebruik de query string waarde ook niet op deze plaats, ik had hem ff hier neer gezet om het voorbeeld zo compact mogelijk te houden. Ik filter de query string waarde in een aparte variabele bovenaan in mijn sub. :)

Maar wat is er niet netjes aan de impliciete cast? Het is sowieso sneller....

  • whoami
  • Registratie: December 2000
  • Laatst online: 23:32
CaptBiele schreef op 19 april 2004 @ 11:08:

Maar wat is er niet netjes aan de impliciete cast? Het is sowieso sneller....
Waarom denk je dat? Ik denk net dat het trager gaat.

Waarom gebruik je daar trouwens een OdbcType ? Maak je gebruik van de Odbc classes, of van de OleDb classes?

[ Voor 20% gewijzigd door whoami op 19-04-2004 11:13 ]

https://fgheysels.github.io/


  • CaptBiele
  • Registratie: Juni 2002
  • Laatst online: 23-05 16:11

CaptBiele

No Worries!

Topicstarter
Ow? Ik dacht dat als je direct aangeeft wat voor type het is, er niet een extra conversie hoeft op te treden....

Ik gebruik ODBC classes (heb er een MySQL db aan hangen)

  • CaptBiele
  • Registratie: Juni 2002
  • Laatst online: 23-05 16:11

CaptBiele

No Worries!

Topicstarter
grrrr. Ik krijg die stomme parameterized query niet voor elkaar.

Ik heb nog geprobeerd om de parameter expliciet aan te maken, maar geen effect.
Visual Basic .NET:
1
2
3
4
5
6
7
8
9
10
            Dim ProjectID As String = Request.QueryString.Item("P")

             'Create and specify command 
            cmd = cnn.CreateCommand
            cmd.CommandText = "SELECT * FROM iProject WHERE ProjectID = @p_PID"
            cmd.Parameters.Add(New OdbcParameter("@p_PID", OdbcType.Int))
            cmd.Parameters("@p_PID").Value = ProjectID

            'Open datareader
            dreader = cmd.ExecuteReader

Als ik de statement print, dan krijg ik gewoon @p_PID te zien, ipv de juiste integer..

  • whoami
  • Registratie: December 2000
  • Laatst online: 23:32
Dat is logisch, de parameter wordt meegestuurd naar het DBMS enzo, de SQL string blijft de string die jij gemaakt hebt.
Het is het DBMS die de waardes in de parameters gaat gaan zetten.

Krijg je gegevens terug ? Wat is de waarde van de QueryString ?

https://fgheysels.github.io/


  • CaptBiele
  • Registratie: Juni 2002
  • Laatst online: 23-05 16:11

CaptBiele

No Worries!

Topicstarter
Ah ok. Dat is inderdaad logisch jah :)
De waarde in de querystring is 111000.

Voor de volledigheid de hele functie die ik gebruik:
Visual Basic .NET:
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
47
48
49
50
51
52
53
54
55
56
57
   Public Sub showProjectInfo()
        '***************************************
        'Function:  This sub prints the information of the selected project
        '***************************************
        Dim ProjectID As String = Request.QueryString.Item("P")

        Try
            'Establish connection to database 
            cnn.ConnectionString() = strConnection
            cnn.Open()

            'Create and specify command 
            cmd = cnn.CreateCommand
            cmd.CommandText = "SELECT * FROM iProject WHERE ProjectID = @p_PID"
            cmd.Parameters.Add(New OdbcParameter("@p_PID", OdbcType.Int))
            cmd.Parameters("@p_PID").Value = ProjectID

            'Open datareader
            dreader = cmd.ExecuteReader

            Response.Write(dreader.FieldCount)  // toont 5
            'Show information
            Response.Write("<div class=""header"">Project Information</div>")
            Response.Write("<table>")
            While dreader.Read
                Response.Write(" <tr>")
                Response.Write("       <td>ID:</td>                 <td class=""data"">" & dreader.GetInt32(0) & "</td>")
                Response.Write(" </tr>")
                Response.Write(" <tr>")
                Response.Write("       <td>Name:</td>            <td class=""data"">" & dreader.GetString(1) & "</td>")
                Response.Write(" </tr>")
                Response.Write(" <tr>")
                Response.Write("       <td>Description:</td>    <td class=""data"">" & dreader.GetString(2) & "</td>")
                Response.Write(" </tr>")
                Response.Write(" <tr>")
                Response.Write("       <td>Owner:</td>           <td class=""data"">" & dreader.GetString(3) & "</td>")
                Response.Write(" </tr>")
                Response.Write(" <tr>")
                Response.Write("       <td>Type:</td>             <td class=""data"">" & dreader.GetString(4) & "</td>")
                Response.Write(" </tr>")
            End While
            Response.Write("</table>")

        Catch ex As Exception
            Response.Write("Error: " & ex.Source & ": " & ex.Message)
        Finally
            'Close connection to datareader and database
            dreader.Close()
            cnn.Close()

            'Free all resources used for the connection
            If Not cnn Is Nothing Then
                cnn.Dispose()
            End If
        End Try

    End Sub


Ik krijg blijkbaar gegevens terug, want als ik de reader.FieldCount print krijg ik 5 te zien...
Alleen nu worden mijn waardes niet meer geprint. Dit probleem had ik gisteren ook al, en na een reboot werkte het ineens weer... 8)7 |:(

  • whoami
  • Registratie: December 2000
  • Laatst online: 23:32
Ik denk niet dat je zomaar op die Fieldcount mag afgaan.

FieldCount returned het aantal columns dat je recordset bevat, en dat kan ook > 0 zijn, ook als je geen records in je recordset hebt zitten.
Niet getest , maar dat denk ik

Je kunt beter eens naar de property HasRows van je Reader kijken (als je .NET 1.1 gebruikt).

https://fgheysels.github.io/


  • CaptBiele
  • Registratie: Juni 2002
  • Laatst online: 23-05 16:11

CaptBiele

No Worries!

Topicstarter
whoami, als zo vaak heb je weer eens gelijk. De fieldCount print 5 (columnheaders) , maar de HasRows print false! Sjonge jonge, wat misleidend :)

Nee, ik krijg dus geen gegevens terug... De fout zit hem dus in het het volgende gedeelte:
Visual Basic .NET:
1
2
3
cmd.CommandText = "SELECT * FROM iProject WHERE ProjectID = @p_PID"
cmd.Parameters.Add(New OdbcParameter("@p_PID", OdbcType.Int))
cmd.Parameters("@p_PID").Value = ProjectID


Ik weet alleen niet waar....

[ Voor 43% gewijzigd door CaptBiele op 19-04-2004 16:23 ]


  • whoami
  • Registratie: December 2000
  • Laatst online: 23:32
Ik denk toch dat het te maken heeft met het feit dat je een string aan die parameter toekent, terwijl je die parameter als een integer hebt gedefinieerd.

Convert hetgeen je uit de querystring haalt eens naar een integer ipv naar een string, en assign die integer dan aan je parameter collection.

https://fgheysels.github.io/


  • CaptBiele
  • Registratie: Juni 2002
  • Laatst online: 23-05 16:11

CaptBiele

No Worries!

Topicstarter
Dat is inderdaad logisch wat je zegt... helaas werkt het volgende nog steeds niet:
Visual Basic .NET:
1
2
3
cmd.CommandText = "SELECT * FROM iProject WHERE ProjectID = @p_PID"
cmd.Parameters.Add(New OdbcParameter("@p_PID", OdbcType.Int))
cmd.Parameters("@p_PID").Value = Convert.ToInt32(ProjectID)

Ik neem aan dat je dit bedoelt...

  • whoami
  • Registratie: December 2000
  • Laatst online: 23:32
Heb je dan wel een row in je databank die een projectID heeft dat jij doorstuurd?

https://fgheysels.github.io/


  • CaptBiele
  • Registratie: Juni 2002
  • Laatst online: 23-05 16:11

CaptBiele

No Worries!

Topicstarter
ja want als ik dus het volgende doe:
Visual Basic .NET:
1
cmd.CommandText = "SELECT * FROM iProject WHERE ProjectID = " & ProjectID

Dan krijg ik netjes mijn resultaten te zien...

  • whoami
  • Registratie: December 2000
  • Laatst online: 23:32
Argh, nu valt m'n frank / euro / whatever.

Die parameter place-holders die ik in dat FAQ stukje heb gebruikt, werken perfect bij SqlClient (SQL Server) en bij Access.
Als je OleDb gebruikt, kan je ook ? als place-holder gebruiken (ik geloof dat ik dat ook in dat stukje vermeld heb), en dat zal dus ook werken bij Odbc vermoed ik.

Echter, je zegt dat je MySQL gebruikt; ik weet nu dus niet zeker of MySQL wel parametrized queries ondersteunt. Misschien moet je dat ff opzoeken, en daarna kan je ff kijken wat je als place-holder moet gebruiken in MySQL als pq's ondersteund worden.

https://fgheysels.github.io/


  • CaptBiele
  • Registratie: Juni 2002
  • Laatst online: 23-05 16:11

CaptBiele

No Worries!

Topicstarter
omg, nu valt bij mij de australische dollar ook.

Ik heb nu MySQL 4.0.17 en daarin worden de parameterized queries wel ondersteund. Inderdaad met een '?'.
MySQL ondersteunt alleen geen named parameters, dus is de volgorde van uiterst belang.

Dit is de werkende code:
Visual Basic .NET:
1
2
cmd.CommandText = "SELECT * FROM iProject WHERE ProjectID = ?"
cmd.Parameters.Add(New OdbcParameter("", ProjectID))

Let er wel op: de ProjectID dient NIET naar een integer te worden geconverteerd. Dan werkt het niet meer.

iig bedankt whoami, voor je snelle reacties en niet te vergeten jouw geduld _/-\o_

[ Voor 55% gewijzigd door CaptBiele op 19-04-2004 17:02 ]


  • whoami
  • Registratie: December 2000
  • Laatst online: 23:32
:?
Best vreemd dat het niet werkt ls je projectId als een integer meegeeft. Dat zou gewoon moeten werken (als ProjectID in jouw DB een numeriek veld is natuurlijk).

https://fgheysels.github.io/


  • CaptBiele
  • Registratie: Juni 2002
  • Laatst online: 23-05 16:11

CaptBiele

No Worries!

Topicstarter
Ja ik weet het ook niet eigenlijk. Ik heb er gisteren niet meer naar gekeken omdat ik zo verheugd was dat het werkte :)

Maar het veld is wel degelijk numeriek. Ik heb hem gedeclareerd als MEDIUMINT(6) UNSIGNED om precies te zijn..
Pagina: 1