Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

[VB.NET] Variabele in SQL querie (beginnersvraag)

Pagina: 1
Acties:

  • Speedswitch
  • Registratie: December 2004
  • Laatst online: 18-11 11:18
Hallo tweakers,

Ik ben bezig met mijn eerste VB.NET programmeersel, mijn kennis is dus ook nog in ontwikkelfase.
Waarschijnlijk is dit voor de meer ervaren programmeurs onder u heel eenvoudig.

Ik heb een combobox (combolev) met namen van leveranciers. Als ik een leverancier selecteer, wil ik dat het adres erbij gezocht word. Ik heb hiervoor de volgende sql query:

code:
1
SELECT straat FROM leverancier WHERE Leverancier = hier moet een variabele komen met de text uit de combobox


Maar.. als ik een variabele in de query zet(die verwijst naar de combobox), krijg ik geen results.
Als ik een naam van een leverancier hard in de code zet krijg ik wel results. De waarde van de variabele is ook goed. Het probleem zit dus in de koppeling tussen de variabele en het SQL script.

Kan iemand mij uitleggen hoe ik mijn variabele moet invoegen in het SQL script?

excuses als deze vraag te eenvoudig is, maar ik kon er via google niet uitkomen en hier met de forumsearch ook niet.

Alvast bedankt :)

  • Snake
  • Registratie: Juli 2005
  • Laatst online: 07-03-2024

Snake

Los Angeles, CA, USA

SelectedObject?

SelectedIndex?

En met wat bouwt ge u query? Eventueel kijken naar Parameters.

Going for adventure, lots of sun and a convertible! | GMT-8


Verwijderd

Dat zou heel goed aan de quotes kunnen liggen, in mijn ervaring vindt Oracle het fijn om een single quote te gebruiken voor char-string

... WHERE Leverancier = 'abc'

  • Onbekend
  • Registratie: Juni 2005
  • Nu online

Onbekend

...

Je moet de naam hebben die in die combobox staat.
Ongeveer zo: FormComboBox.Item[FormComboBox.SelectedIndex].ToString.
Item moet misschien ItemData wezen, maar dit zou je gemakkelijk moeten kunnen vinden op het internet.

De post hieronder geeft een simpelere oplossing. :)

[ Voor 12% gewijzigd door Onbekend op 22-05-2008 20:47 ]

Speel ook Balls Connect en Repeat


  • urk_forever
  • Registratie: Juni 2001
  • Laatst online: 14-11 22:24
Visual Basic:
1
"SELECT * FROM tabel WHERE leverancier='" & comboBox.SelectedValue

Hail to the king baby!


  • roy-t
  • Registratie: Oktober 2004
  • Laatst online: 17-10 16:43
Bouw jij je SQL Query op en leg je verbinding met je database?

Wat je zoekt is een parameterized Query ( http://www.google.nl/sear...&btnG=Google+zoeken&meta= )

Of iig dat is de nette manier, waarop het altijd goed zal gaan, je voegt paramaters in in je query (bij MySQL moet je die geen naam geven en op volgorde in voegen, bij andere databases kun je de paramters ook nog een naam geven)

De "lelijke" manier is dat je zelf een string maakt met daarin de goede query vb:

"SELECT * FROM leverancier WHERE leverancier = " & txtInvoer.text

Daarna ga je naar SQL object (ODBC connection bijvoorbeeld) en je execute met die string als paramater, echter dit gaat fout op het moment dat een user in het tekstvak "%^*!|\\!''''''" in typt of ook een SQL query.

Succes iig

~ Mijn prog blog!


  • Speedswitch
  • Registratie: December 2004
  • Laatst online: 18-11 11:18
Bedankt voor de snelle reacties allemaal.

De selectie in de SQL query is gelukt voor zover ik kan zien, echter nu begint data-adapter te boeren bij het vullen. Melding: Syntaxisfout in tekenreeks. in query-expressie leverancier ='Quote components.

Kan iemand mij vertellen wat hier fout gaat?

nb. Quote components is in dit geval de waarde die in de combobox staat, de combobox word dus uitgelezen in in de query gebruikt. Dit werkt dus in ieder geval.

[ Voor 21% gewijzigd door Speedswitch op 22-05-2008 21:26 ]


  • roy-t
  • Registratie: Oktober 2004
  • Laatst online: 17-10 16:43
Speedswitch schreef op donderdag 22 mei 2008 @ 21:24:
Bedankt voor de snelle reacties allemaal.

De selectie in de SQL query is gelukt voor zover ik kan zien, echter nu begint data-adapter te boeren bij het vullen. Melding: Syntaxisfout in tekenreeks. in query-expressie leverancier ='Quote components.

Kan iemand mij vertellen wat hier fout gaat?

nb. Quote components is in dit geval de waarde die in de combobox staat, de combobox word dus uitgelezen in in de query gebruikt. Dit werkt dus in ieder geval.
Waarschijnlijk gaat het fout dat "Quote Components" een spatie bevat, je zult dus " en " om Quote Components heen moeten zetten, maar deze moet je ook escapen, zodat je code ermee om kan gaan, maar waarschijnlijk kun je er nu nog even quick 'n' dirty ermee weg komen door in je combo box gewoon "Quote Components" in te vullen met aanhalings tekens, natuurlijk is dat geen werkbare oplossing voor altijd :)

~ Mijn prog blog!


  • Niemand_Anders
  • Registratie: Juli 2006
  • Laatst online: 09-07-2024

Niemand_Anders

Dat was ik niet..

Nee, beter kun je SQL Parameters gebruiken (voorkomt ook op eenvoudige wijze sql injection).

Ik heb al jaren niet meer in VB.net geprogrammeerd, dus ik geef het voorbeeld in C#, maar de VB methode is vrijwel hetzelfde. Zeker wat betreft het zetten van de properties en parameters.
C#:
1
2
3
4
5
6
7
SqlCommand cmd = new SqlCommand();
cmd.Connection = new SqlConnection(connectionString);
cmd.CommandText = "SELECT TOP 5 Lastname, Email from tblCustomer WHERE CustomerID=@CustomerID";

cmd.Parameters.AddWithValue("@CustomerID", 12); // <-- dit is dus de variable gebruikt in de query

//Op dit punt dien je de ExecuteNonQuery, ExecuteReader of andere Execute methode aan te roepen.



Hoewel je in de query ook '?' in plaats van @CustomerID kunt gebruiken. '?' maakt eenzelfde variabele als de veldnaam. ' WHERE (Email=?) AND (Active=?) AND (CustomerID=?) ' SqlCommand maakt dan automatisch de variabelen @Email, @Active en @CustomerID aan. Persoonlijk vind ik dat het gebruik van de vraagtekens de query minder leesbaar maakt. Maar dat is een keuze welke je zelf zult moeten maken.

If it isn't broken, fix it until it is..


  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
Niemand_Anders schreef op vrijdag 23 mei 2008 @ 08:48:
Nee, beter kun je SQL Parameters gebruiken (voorkomt ook op eenvoudige wijze sql injection).

Ik heb al jaren niet meer in VB.net geprogrammeerd, dus ik geef het voorbeeld in C#, maar de VB methode is vrijwel hetzelfde. Zeker wat betreft het zetten van de properties en parameters.
C#:
1
2
3
4
5
6
7
SqlCommand cmd = new SqlCommand();
cmd.Connection = new SqlConnection(connectionString);
cmd.CommandText = "SELECT TOP 5 Lastname, Email from tblCustomer WHERE CustomerID=@CustomerID";

cmd.Parameters.AddWithValue("@CustomerID", 12); // <-- dit is dus de variable gebruikt in de query

//Op dit punt dien je de ExecuteNonQuery, ExecuteReader of andere Execute methode aan te roepen.
Idd dat is de juiste manier om het te doen. Queries bouwen met string concatenatie is meestal niet de juist manier om het te doen!
Hoewel je in de query ook '?' in plaats van @CustomerID kunt gebruiken. '?' maakt eenzelfde variabele als de veldnaam. ' WHERE (Email=?) AND (Active=?) AND (CustomerID=?) ' SqlCommand maakt dan automatisch de variabelen @Email, @Active en @CustomerID aan. Persoonlijk vind ik dat het gebruik van de vraagtekens de query minder leesbaar maakt. Maar dat is een keuze welke je zelf zult moeten maken.
Is het niet zo dat als je vraagtekens gebruikt ook de parameters in de juiste volgorde toe moet voegen?

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
rwb schreef op vrijdag 23 mei 2008 @ 08:54:
Is het niet zo dat als je vraagtekens gebruikt ook de parameters in de juiste volgorde toe moet voegen?
Bij mijn weten ook, maar pin me d'r niet op vast ;)

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


  • whoami
  • Registratie: December 2000
  • Laatst online: 11:55
Dat is zo, maar waarom zou je vraagtekens gaan gebruiken ?
Het is ook zo dat, als je OleDb gebruikt , je named parameters kan gebruiken, maar ook daar moet je ze in de juiste volgorde toevoegen.

Trouwens, we hebben over heel dit gedoe een stukje in de FAQ

[ Voor 27% gewijzigd door whoami op 23-05-2008 09:33 ]

https://fgheysels.github.io/

Pagina: 1