Prévention de l'injection SQL dans ASP.Net

J'ai ce code

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

Comment pourrais-je empêcher les Injections SQL?

Mise à JOUR

Voici ce que je suis en train

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

Pour quelque raison que tout ce que j'ai essayer et d'ajouter qu'il ne semble pas fonctionner, je reçois des SQL Command mentionnés ci-dessous.

L'erreur est ce

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

Je prends quelqu'un d'autre travail, donc c'est tout nouveau pour moi et je voudrais faire les choses de la bonne façon, donc si quelqu'un peut fournir plus d'aide sur comment faire ma requête ci-dessus, à l'abri de SQL injections alors s'il vous plaît.

MISE À JOUR N ° 2

J'ai ajouté dans le code VasilP dit comme ça

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

Mais j'obtiens une erreur Tools is not declared ai-je besoin de spécifier l'espace de noms pour que cela fonctionne?

Mise à JOUR

Quiconque a des idées sur le meilleur, de faire ma requête à l'abri de l'injection SQL sans les erreurs que je suis en train de vivre?

Mise à JOUR

Je l'ai donc fonctionner sans les paramètres bits voici mon code mis à jour une idée pourquoi ne pas ajouter de la valeur du paramètre?

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()

Il fonctionne comme ceci

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()

L'erreur que j'obtiens est ce

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

Et c'est parce qu'il n'est pas de remplacer le @investor avec le 69836

Des idées?

SOLUTION

Voici comment j'ai résolu mon problème

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()

Maintenant, je peux écrire des requêtes sans avoir le souci de l'injection SQL

source d'informationauteur Jamie Taylor