0
を使用しては、次のとおりです。防止SQLインジェクションとの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インジェクションXALASKAID = '" & LicenseNumber & "'
であり、それは、クエリ内にあります。 '" & LicenseNumber & "'
を使用する代わりに、次のように変更する必要があります。 myCmd.Parameters.Add("@LicID", SqlDbType.Int) myCmd.Parameters("@LicID").Value = LicenseNumber
パラメータを使用してLicenseNumberに入っているすべてが空または空です。また、私はコードをあまりにも多くのコードを再利用していると思う私のコードで助手が必要です。ちょっと単純化することができれば、ありがとう。
PS:私はすべての宣言をグローバルとして持っています。
あなたは、LicenseNumberのパラメータをどのように使用しているのかを表示するかもしれません。 – Plutonix
あなたは私たちに(あなたはSQL注入可能な)コードを示しています。働いている? – David
上記のコードは正常に動作しますが、クエリ内で ''"&LicenseNumber& "''を使用することはできません。代わりに '@ LicID'を使用してSQLインジェクションを防止することをお勧めします。 Value = LicenseNumber' '@LicID'を呼び出そうとすると動作しません。これは、私が' @LicID'を呼び出すときに動作しません。クエリ内にあります。また、 'LicenseNumber'は、txtlicnumというテキストボックスからグローバルとして値を保持するStringとして設定された変数です。 –