Vorbeugen von SQL Injection in ASP.Net

Ich habe diesen Code

UPDATE OPENQUERY (db,'SELECT * FROM table WHERE ref = ''"+ Ref +"'' AND bookno = ''"+ Session("number") +"'' ') 

Wie würde ich SQL-Injections in diesem Fall verhindern?

AKTUALISIERE

Hier ist was ich versuche

SqlCommand cmd = new SqlCommand("Select * from Table where ref=@ref", con); 
cmd.Parameters.AddWithValue("@ref", 34);

Aus irgendeinem Grund scheint alles, was ich versuche und hinzufüge, nicht zu funktionieren. Ich bekomme immerSQL Command unten genannten

Der Fehler ist dieses

'SqlCommand' is a type and cannot be used as an expression

Ich übernehme die Arbeit eines anderen, daher ist das alles neu für mich und ich würde gerne die Dinge richtig machen. Wenn also jemand mehr Hilfe geben kann, wie ich meine Anfrage oben vor SQL-Injections schützen kann, dann mach es bitte.

UPDATE NO 2

Ich fügte im Code hinzu, wie VasilP dies sagte

Dim dbQuery As [String] = "SELECT * FROM table WHERE ref = '" & Tools.SQLSafeString(Ref) & "' AND bookno = '" & Tools.SQLSafeString(Session("number")) & "'"

Aber ich bekomme eine FehlermeldungTools is not declared Muss ich einen bestimmten Namespace angeben, damit es funktioniert?

AKTUALISIERE

Hat jemand eine Idee, wie ich meine Abfrage ohne die aufgetretenen Fehler vor SQL-Injection schützen kann?

AKTUALISIERE

Ich habe es jetzt, damit es ohne die Parameter funktioniert. Hier ist mein aktualisierter Quellcode. Irgendeine Idee, warum der Parameterwert nicht hinzugefügt wird.

Dim conn As SqlConnection = New SqlConnection("server='server1'; user id='w'; password='w'; database='w'; pooling='false'")
   conn.Open()


Dim query As New SqlCommand("Select * from openquery (db, 'Select * from table where investor = @investor ') ", conn)
query.Parameters.AddWithValue("@investor", 69836)

dgBookings.DataSource = query.ExecuteReader
dgBookings.DataBind()

Es funktioniert so

Dim conn As SqlConnection = New SqlConnection("server='server1'; user id='w'; password='w'; database='w'; pooling='false'")
   conn.Open()


Dim query As New SqlCommand("Select * from openquery (db, 'Select * from table where investor = 69836') ", conn)

dgBookings.DataSource = query.ExecuteReader
dgBookings.DataBind()

The Fehler, den ich erhalte, ist dieses

An error occurred while preparing a query for execution against OLE DB provider 'MSDASQL'. 

Und es ist, weil es das @ nicht erset@investor mit dem69836

Irgendwelche Ideen

LÖSUN

Hier habe ich mein Problem gelöst

Dim conn As SqlConnection = New SqlConnection("server='h'; user id='w'; password='w'; database='w'; pooling='false'")

conn.Open()

Dim query As New SqlCommand("DECLARE @investor varchar(10), @sql varchar(1000) Select @investor = 69836 select @sql = 'SELECT * FROM OPENQUERY(db,''SELECT * FROM table WHERE investor = ''''' + @investor + ''''''')' EXEC(@sql)", conn)

dgBookings.DataSource = query.ExecuteReader
dgBookings.DataBind()

etzt kann ich Abfragen schreiben, ohne mir Sorgen um die SQL-Injection machen zu müsse

Antworten auf die Frage(16)

Ihre Antwort auf die Frage