Avatar billede left Nybegynder
18. marts 2006 - 15:06 Der er 11 kommentarer og
1 løsning

Lave SQL-kald med parametre

Hej

Når jeg skal finde alle personer, som bor indenfor samme postnummer skriver jeg som nedenstående:

SQL-kald:
"SELECT AntoID, Navn, Efternavn, Postnummer FROM Personer WHERE (Postnummer = ?)"

Kode i VB.NET:
OleDbDataAdapter1.SelectCommand.Parameters("PostNummer"). Value = 8200

MEN hvad nu hvis jeg skal finde dem der bor i postnummer 8000 til 8200. SQL-kaldet er enkelt, men sagen er straks en anden når jeg nu skal sende 2 variabler:
"SELECT AntoID, Navn, Efternavn, Postnummer FROM Personer WHERE Postnummer BETWEEN ? AND ?"

Har undret mig længe over hvordan det foregår, så please en detaljeret løsning - af samme grund også alle de points.
Avatar billede arne_v Ekspert
18. marts 2006 - 15:07 #1
"SELECT AntoID, Navn, Efternavn, Postnummer FROM Personer WHERE (Postnummer >= ? AND Postnummer <= ?)"

OleDbDataAdapter1.SelectCommand.Parameters("PostNummer1"). Value = 8000
OleDbDataAdapter1.SelectCommand.Parameters("PostNummer2"). Value = 8200

tror jeg
Avatar billede arne_v Ekspert
18. marts 2006 - 15:08 #2
I alt andet end OLE DB (og ODBC måske) ville du give din parametre navne og kunne
bruge disse navne (og så ser det logisk ud)

men OLE DB bruger position ikke navn
Avatar billede left Nybegynder
18. marts 2006 - 15:21 #3
Jeg får følgende fejl:
"An OleDbParameterName 'postnummer2' is not contained by this OleDbParameterCollection."
Avatar billede arne_v Ekspert
18. marts 2006 - 16:16 #4
har du addet den ?
Avatar billede left Nybegynder
18. marts 2006 - 16:37 #5
Nej, den del har jeg aldrig rigtig forstået, da det for mig for det meste har virket uden (f.eks. det første af mit eksempel). Hvad går det ud på og hvad skal jeg skrive?
Avatar billede arne_v Ekspert
18. marts 2006 - 20:34 #6
du skal jo både add'e en parameter og sette dens value
Avatar billede arne_v Ekspert
18. marts 2006 - 20:35 #7
Avatar billede arne_v Ekspert
18. marts 2006 - 20:36 #8
bemærk at jeg bruger navne fremfor spørgsmåsltegn

men det betyder ikke at navnene i selve SQL har betydning - det er kun
for læsbarhedens skyld
Avatar billede lordnelson Seniormester
19. marts 2006 - 00:01 #9
hvis du har et query der ligner det her
SELECT    Adresse, Postnr
FROM        nyhedsbreve
WHERE    (Postnr between ? and ?)

I mit tilfælde hedder den Filby4

Du kan så bruge dette i det felt du ønsker skal aktivere den
fek.s i en dopdown ved change såldes:
Try

            Me.NyhedsbreveTableAdapter1.FillBy4(Me.EmailDataSet1.nyhedsbreve, cbopost1.SelectedValue, cbopost2.SelectedValue)
        Catch ex As System.Exception
            System.Windows.Forms.MessageBox.Show(ex.Message)
        End Try

her skal du bemærke cbopost1.SelectedValue og cbopost2.SelectedValue der begge
er værdier fra dropdownbokse men istedet kan du placere dine variabler.

Når du skriver me. efter try kommer valg muligheden for din connection i dette tilfælde NyhedsbreveTableAdapter1 derefter et . så kan du vælge hvilken query du vil bruge, resten er bare derud af.

LN
Avatar billede left Nybegynder
19. marts 2006 - 01:55 #10
Så fik jeg det endelig til at virke!

Havde ikke den vigtige Imports System.Data.OleDb med, hvorfor det blev lidt svært at adde. Du bruger i din artikel @ foran parametre, men det virker ikke hos mig hvor jeg i stedet har brugt : for parameterernes navne.

Smider du ikke lige et svar arne?
Avatar billede arne_v Ekspert
19. marts 2006 - 02:01 #11
ok
Avatar billede left Nybegynder
19. marts 2006 - 23:11 #12
Og mange tak :-)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester