Avatar billede torotune Nybegynder
18. maj 2010 - 15:48 Der er 4 kommentarer og
1 løsning

SQL Parameters ved DataAdapter

Hej, jeg bruger følgende metode til at fylde et GridView:

                 
    strSql = "SELECT * FROM Sager WHERE Adresse LIKE txtAdresse.Text"
       
            Using conn As New OleDbConnection(Boligcs)
                        conn.Open()

                Dim ad As New OleDbDataAdapter(strSql, conn)
                Dim ds As New DataSet()

                        ad.Fill(ds)

                        GridView1.DataSource = ds
                        GridView1.DataBind()

            End Using

Jeg vil så gerne smide en parameter på txtAdresse.text (@Adresse) for at undgå Sql Injection. Hvordan tilfører jeg SQL-parametre til en DataAdapter på samme måde som jeg kan på en OleDbCommand?

Mvh.
Avatar billede arne_v Ekspert
18. maj 2010 - 16:08 #1
Noget kode fra lageret:

            con = New OleDbConnection ("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Databases\MSAccess\Test.mdb")
            con.Open
            cmd = New OleDbCommand("SELECT * FROM T1 WHERE F1 >= ?", con)
            cmd.Parameters.Add("@F1", OleDbType.Integer)
            cmd.Parameters("@F1").Value = 2
            da = New OleDbDataAdapter(cmd)
            cb = New OleDbCommandBuilder(da)
            da.UpdateCommand = cb.GetUpdateCommand
            ds = New DataSet
            da.Fill(ds, "T1")
            dg = New DataGrid
Avatar billede torotune Nybegynder
19. maj 2010 - 09:00 #2
Hej Arne, det virker fint.

Men jeg har som noget nyt lidt fundet ud af, at det har betydning, når jeg har flere navngivne parametre i samme sql-sætning, hvilken rækkefølge de deklareres i..! Ellers virker det ikke.

Hvordan kan det være, og hvordan kommer man uden om det?
Avatar billede arne_v Ekspert
20. maj 2010 - 00:02 #3
Normalt bruges navnene og rækkefølgen er ligegyldig.

Men ODBC og OLE DB bruger rækkefølgen.

Fortsæt med MS Access og brug den rigtige rækkefølge.

Eller skift til en anden database som har en ægte ADO.NET provider der understøtter navne parametre fuldtud - f.eks. SQLServer eller SQLServer CE.
Avatar billede arne_v Ekspert
20. maj 2010 - 00:02 #4
Og et svar fra mig.
Avatar billede torotune Nybegynder
20. maj 2010 - 01:42 #5
Oki. Har brugt OleDB med navngivne parametre masser af gange, men aldrig opdaget at rækkefølgen var nødvendig.

Fandt ud af at OleDbDataAdapter også har en .SelectCommand som man kan smide .Parameters.AddWithValue på. så man ikke nødvendigvis behøver at bruge OleDbCommand - men fint eksempel.

Tak for helps denne gang :)
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



IT-JOB