Je pas à courir une amende d'application à l'intérieur VB.Net, le code folling est:Prévenir SQL Injection et en utilisant SqlDataAdapter
Private Sub LoadAttachments()
tablegrid = New DataTable
myConn = New SqlConnection("Server=CEDASDSOBSQL02\dev; Database=Insurance; Integrated Security=true")
myConn.Open()
myCmd = myConn.CreateCommand
Dim query As String = "SELECT DocType, docyear, CASE WHEN docmonth IS NULL THEN NULL " & _
"WHEN docmonth = '0' THEN '- All Months -' WHEN docmonth >= 1 AND docmonth <= 12 " & _
"THEN DATENAME(month, DATEADD(month, docmonth, -1)) END DocMonth, DID from dbo.Document where XALASKAID = '" & LicenseNumber & "' and DOCTYPE like '%Report%'"
da = New SqlDataAdapter(query, myConn)
myCmd = New SqlCommand(query, myConn)
myCmd.CommandType = CommandType.Text
da = New SqlDataAdapter(myCmd)
da.Fill(tablegrid)
DataGridView3.DataSource = tablegrid
Label4.Text = "Found " & DataGridView3.Rows.Count & " images"
End Sub
Donc, ce code est une injection SQL XALASKAID = '" & LicenseNumber & "'
et qui est à l'intérieur de la requête. Au lieu d'utiliser '" & LicenseNumber & "'
je dois changer quelque chose comme: @LicNum
puis ajouter myCmd.Parameters.Add("@LicID", SqlDbType.Int) myCmd.Parameters("@LicID").Value = LicenseNumber
Tout ce que je reçois dans le LicenseNumber en utilisant le paramètre est nul ou vide. Aussi j'ai besoin d'un assistant dans mon code je pense que je réutilise trop de code. Si c'est possible de simplifier un peu, merci. PS: J'ai toute ma déclaration en tant que Global.
vous pouvez montrer * comment * vous utilisez un paramètre pour LicenseNumber – Plutonix
Vous nous avez montré le code qui fonctionne (mais SQL-injectable), et vous nous demandez pourquoi d'autres codes que vous ne nous avez pas montré isn ne travaille pas? – David
Le code ci-dessus fonctionne très bien, le problème est que nous ne pouvons pas utiliser ''" & LicenseNumber & "'' à l'intérieur de la requête, je préfère utiliser '@ LicID' pour empêcher l'injection SQL. quand jamais je définis le 'myCmd.Parameters.Add (" @ LicID ", SqlDbType.Int) myCmd.Parameters (" @ LicID "). Value = LicenseNumber' Ne fonctionne pas quand j'essaie d'appeler' @ LicID' dans la requête. De plus 'LicenseNumber' est une variable définie comme String qui contient la valeur globale d'une zone de texte appelée txtlicnum. –