[VB.NET] Parametrized queries

Pagina: 1
Acties:

  • Remco
  • Registratie: Januari 2001
  • Laatst online: 15:56
Ik ben gebruik gaan maken van parametrized queries nadat ik op het bestaan ervan ben gewezen.
Nu heb ik een vraag waar ik maar niet uitkom.
Ik heb me helemaal de "blubber" gezocht op google en msdn, maar of het is er niet, of ik gebruik de verkeerde zoekwoorden.

Mijn vraag is:
Hoe kan ik de querie zien die daadwerkelijk gemaakt word.

mycommand is een sqlcommand.

Met:
mycommand.executenonquery() kan ik de query die ik gemaakt heb naar de database sturen.
Maar er klopt iets niet aan mijn query, dus wil ik hem even in een textboxje zien.
Met:
mycommand.tostring
mycommand.commandtext
etc...
Ik krijg hem niet te zien.

Wie weet hoe ik hem wel te zien krijg ?
Maar dan met de ingevulde waardes, dus niet met de @-tekens.

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


  • whoami
  • Registratie: December 2000
  • Laatst online: 15:14
Als je SQL Server als database gebruikt, kan je de Profiler van Sql Server gebruiken. Je kan dan de query zien die doorgestuurd wordt (met de @tekens erin weliswaar), maar je ziet ook welke waardes die parameters krijgen.

(En je kan natuurlijk ook jouw programma debuggen, en watches zetten op de variablen die je aan je parameters doorgeeft).

Trouwens, als er iets niet klopt aan je query, dan zal het hoogstwaarschijnlijk niet liggen aan de parameters (of aan de inhoud ervan).
Ik zou zowiezo eerst eens m'n sql statement bekijken, zonder naar die parameters te kijken. Misshcien ben je wel ergens een komma ofzo vergeten.

[ Voor 52% gewijzigd door whoami op 15-12-2003 15:09 ]

https://fgheysels.github.io/


  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 13:28

gorgi_19

Kruimeltjes zijn weer op :9

Een hele luie methodiek moet zijn om SQL Profiler van SQL Server op te starten; daar zie je hem vanzelf in verschijnen.. :P Controleren kan dan met Query Analyzer

(Bovenstaande indien je SQL Server 2k gebruikt)

edit:

whoami, hoe krijg je het voor elkaar om op hetzelfde moment exact hetzelfde verhaal neer te zetten? :?

[ Voor 22% gewijzigd door gorgi_19 op 15-12-2003 15:09 ]

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • whoami
  • Registratie: December 2000
  • Laatst online: 15:14
gorgi_19 schreef op 15 december 2003 @ 15:08:
edit:

whoami, hoe krijg je het voor elkaar om op hetzelfde moment exact hetzelfde verhaal neer te zetten? :?
Voor zover ik weet, kan ik nog geen gedachten lezen ofzo hoor. :)
GMTA ofzo zeker? :+

https://fgheysels.github.io/


  • Remco
  • Registratie: Januari 2001
  • Laatst online: 15:56
tnx, dat heb ik dus geinstalleerd.

Ben alleen van de regen in de drup beland.
Alles ziet er goed uit, maar toch..............

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


  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 13:28

gorgi_19

Kruimeltjes zijn weer op :9

Remc0 schreef op 15 december 2003 @ 15:50:
tnx, dat heb ik dus geinstalleerd.

Ben alleen van de regen in de drup beland.
Alles ziet er goed uit, maar toch..............
Erhm...

Je voert een query uit, je ziet hem in Profiler, vervolgens controleer je hem in QA. Levert dit nog een fout op, dan ben ik ook wel benieuwd hoe je een SQLException krijgt...

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • whoami
  • Registratie: December 2000
  • Laatst online: 15:14
Remc0 schreef op 15 december 2003 @ 15:50:
tnx, dat heb ik dus geinstalleerd.

Ben alleen van de regen in de drup beland.
Alles ziet er goed uit, maar toch..............
Maar toch wat?
Ben je wel zeker dat het probleem zich rond die parameters situeert?

Als je query zeker juist is, dan kan het ook zijn dat je het verkeerde data-type aan die parameter meegeeft. bv:
code:
1
Command1.Parameters.Add ("@p_blaat", SqlDbType.Int);

terwijl het veld waarmee @p_blaat vergeleken ofzo wordt, geen Integer is.

https://fgheysels.github.io/


  • Remco
  • Registratie: Januari 2001
  • Laatst online: 15:56
Ik heb geen flauw idee waarom hij een exception opgooit.

Dit is mijn string:
Visual Basic:
1
2
3
4
5
6
Dim insertcmd As String = "INSERT INTO t_medewerkers
(voornaam,achternaam,loginnaam,contracturen,advuren,
afdeling,vakantiedagen,meegenomen_uren,verlof,spaarverlof) 
Values @voornaam,@achternaam,@loginnaam,@contracturen,
@advuren,@afdeling,@vakantiedagen,@meegenomen_uren,
@verlof,@spaarverlof)"

En deze krijg ik uit mijn profiler:
code:
1
2
3
4
5
6
7
8
9
10
11
INSERT INTO t_medewerkers (voornaam,achternaam,loginnaam,contracturen,advuren,afdeling,
vakantiedagen,meegenomen_uren,verlof,spaarverlof) Values 
(@voornaam,@achternaam,@loginnaam,@contracturen,@advuren,@afdeling,
@vakantiedagen,@meegenomen_uren,@verlof,@spaarverlof)', N'@voornaam
 varchar(4),@achternaam varchar(7),@loginnaam varchar(4),@contracturen decimal
(28,0),@advuren decimal(28,0),@meegenomen_uren decimal(28,0),@afdeling 
varchar(9),@functie varchar(18),@vakantiedagen decimal(28,0),@verlof decimal
(28,0),@spaarverlof decimal(28,0),@uurloon money', @voornaam = 'paul', 
@achternaam = 'dijkman', @loginnaam = 'pdij', @contracturen = 36, @advuren = 3, 
@meegenomen_uren = 3, @afdeling = 'Zuid-Oost', @functie = 'Indicatie adviseur', 
@vakantiedagen = 3, @verlof = 3, @spaarverlof = 3, @uurloon = $2500.0000

En ik heb totaal geen idee wat er fout gaat.
Een qa geeft aan:
code:
1
2
3
4
5
6
Server: Msg 137, Level 15, State 2, Line 1
Must declare the variable '@voornaam'.
Server: Msg 105, Level 15, State 1, Line 1
Unclosed quotation mark before the character string ', @vakantiedagen = 3,
 @verlof = 3, @spaarverlof = 3, @uurloon = $2500.0000
'.

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


  • whoami
  • Registratie: December 2000
  • Laatst online: 15:14
Heb je die parameters wel toegevoegd aan je command object, en heb je iedere parameter een waarde gegeven?
Ik zie ook dat je een ( vergeten bent voor values.

https://fgheysels.github.io/


  • Remco
  • Registratie: Januari 2001
  • Laatst online: 15:56
whoami schreef op 15 december 2003 @ 16:17:
Heb je die parameters wel toegevoegd aan je command object, en heb je iedere parameter een waarde gegeven?
Ik zie ook dat je een ( vergeten bent voor values.
die ( is er uit gevallen met copy/pasten.
Hij staat er in mijn code wel in.
Visual Basic:
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
mycommand.Parameters.Add(New SqlParameter("@voornaam", SqlDbType.VarChar))
        mycommand.Parameters("@voornaam").Value = TextBox1.Text

        mycommand.Parameters.Add(New SqlParameter("@achternaam", SqlDbType.VarChar))
        mycommand.Parameters("@achternaam").Value = TextBox2.Text

        mycommand.Parameters.Add(New SqlParameter("@loginnaam", SqlDbType.VarChar))
        mycommand.Parameters("@loginnaam").Value = TextBox3.Text

        mycommand.Parameters.Add(New SqlParameter("@contracturen", SqlDbType.Decimal))
        mycommand.Parameters("@contracturen").Value = TextBox4.Text

        mycommand.Parameters.Add(New SqlParameter("@advuren", SqlDbType.Decimal))
        mycommand.Parameters("@advuren").Value = TextBox5.Text

        mycommand.Parameters.Add(New SqlParameter("@meegenomen_uren", SqlDbType.Decimal))
        mycommand.Parameters("@meegenomen_uren").Value = TextBox7.Text

        mycommand.Parameters.Add(New SqlParameter("@afdeling", SqlDbType.VarChar))
        mycommand.Parameters("@afdeling").Value = ComboBox1.SelectedItem.ToString

        mycommand.Parameters.Add(New SqlParameter("@functie", SqlDbType.VarChar))
        mycommand.Parameters("@functie").Value = ComboBox2.SelectedItem.ToString

        mycommand.Parameters.Add(New SqlParameter("@vakantiedagen", SqlDbType.Decimal))
        mycommand.Parameters("@vakantiedagen").Value = TextBox6.Text

        mycommand.Parameters.Add(New SqlParameter("@verlof", SqlDbType.Decimal))
        mycommand.Parameters("@verlof").Value = TextBox9.Text

        mycommand.Parameters.Add(New SqlParameter("@spaarverlof", SqlDbType.Decimal))
        mycommand.Parameters("@spaarverlof").Value = TextBox10.Text()

        mycommand.Parameters.Add(New SqlParameter("@uurloon", SqlDbType.Money))
        mycommand.Parameters("@uurloon").Value = TextBox8.Text

Ik heb de types al 2 * gecontroleerd op de database, dus die staan goed.

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


  • whoami
  • Registratie: December 2000
  • Laatst online: 15:14
Heb je misschien ergens een typefout gemaakt bij je parameters?
Bv:
code:
1
2
3
string sql = "INSERT INTO tabel (veld) VALUES (@p_veld_naam)";
....
Command1.Parameters.Add ("@p_veldname", .... );

https://fgheysels.github.io/


  • Rataplan
  • Registratie: Oktober 2001
  • Niet online

Rataplan

per aspera ad astra

* Rataplan is blind :(

[ Voor 102% gewijzigd door Rataplan op 15-12-2003 16:46 ]


Journalism is printing what someone else does not want printed; everything else is public relations.


  • Remco
  • Registratie: Januari 2001
  • Laatst online: 15:56
Geeft niet hoor........

Remco is veeeeeeeeeel blinder.

:X modus:
Als je functie en uurloon niet opneemt in je string, en je mag het veld niet null laten in je database dan doet ie ut niet........

dus effekes uurloon en functie opgenomen in mijn sqlstring en het werkt.

Ben er achter gekomen door een try catch om de execution heen te zetten.
Dan geeft het prog netjes aan dat een null niet allowed is.
Ik zag er overheen omdat de waardes wel netjes werden ingevuld in de query, maar dus geen corresponderend veld hadden.

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

Pagina: 1