Так я получаю запустить штраф приложений в VB.Net, то феллинг код:Предотвращение SQL Injection и использование 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
Так что этот код SQL Injection XALASKAID = '" & LicenseNumber & "'
и что находится внутри запроса. Вместо того, чтобы использовать '" & LicenseNumber & "'
, мне нужно изменить его примерно так: @LicNum
затем добавить myCmd.Parameters.Add("@LicID", SqlDbType.Int) myCmd.Parameters("@LicID").Value = LicenseNumber
Все, что я получаю в LicenseNumber, используя параметр, является нулевым или пустым. Также мне нужен помощник в моем коде, я думаю, что повторно использую слишком много кодировок. Если можно немного упростить, спасибо.
PS: У меня есть все мое заявление как глобальное.
Вы можете показать * как * вы используете параметр для LicenseNumber – Plutonix
Вы показали нам код, который работает (но SQL-инъективен), и вы спрашиваете нас, почему другой код, который вы нам не показывали, isn Не работает? – David
Код выше работает отлично, проблема в том, что мы не можем использовать '' '& LicenseNumber & "'' внутри запроса, вместо этого я suppost для использования '@ LicID' для предотвращения SQL Injection. когда когда-либо я определяю 'myCmd.Parameters.Add (" @ LicID ", SqlDbType.Int) myCmd.Parameters (" @ LicID "). Value = LicenseNumber' Не работает, когда когда-либо пытаюсь вызвать' @ LicID' в запросе. Также 'LicenseNumber' представляет собой переменную, установленную как String, которая удерживает значение global как текстовое поле txtlicnum. –