-2

vb.net を初めて使用する プロジェクト vb.net を使用して 2003 データベースにアクセスし、vb.net を介してデータを挿入してデータベースにアクセスしたい Sql コマンドを使用しています。

cmd.CommandText = "INSERT INTO info(nam, employed, ple, mertebe, navonishan, sermoche, moche, dxindin, dbemoche, brwaname)" + " VALUES (" & Me.NamTextBox.Text & ",'" & CDate(Me.EmployedDateTimePicker.Text) & "','" & CInt(Me.PleTextBox.Text) & "','" & CInt(Me.MertebeTextBox.Text) & "','" & Me.NavonishanTextBox.Text & "','" & CDate(Me.SermocheDateTimePicker.Text) & "','" & CInt(Me.MocheTextBox.Text) & "','" & CByte(Me.DxindinCheckBox.Checked) & "','" & CByte(Me.DbemocheCheckBox.Checked) & "','" & Me.BrwanameTextBox.Text & "' );"
4

1 に答える 1

0

パラメータ化されたクエリを使用します。

cmd.CommandText = "INSERT INTO info(nam, employed, ple, mertebe, navonishan, " & _
                  "sermoche, moche, dxindin, dbemoche, brwaname) VALUES (" & _
                  "?,?,?,?,?,?,?,?,?,?)"
cmd.Parameters.AddWithValue("@p1", Me.NamTextBox.Text)
cmd.Parameters.AddWithValue("@p2", Convert.ToDateTime(Me.EmployedDateTimePicker.Text))
cmd.Parameters.AddWithValue("@p3", Convert.ToInt32(Me.PleTextBox.Text))
cmd.Parameters.AddWithValue("@p4", Convert.ToInt32(Me.MertebeTextBox.Text))
cmd.Parameters.AddWithValue("@p5", Me.NavonishanTextBox.Text)
cmd.Parameters.AddWithValue("@p6", Convert.ToDateTime(Me.SermocheDateTimePicker.Text))
cmd.Parameters.AddWithValue("@p7", Convert.ToInt32(Me.MocheTextBox.Text))
cmd.Parameters.AddWithValue("@p8", Me.DxindinCheckBox.Checked)
cmd.Parameters.AddWithValue("@p9", DbemocheCheckBox.Checked)
cmd.Parameters.AddWithValue("@p10", Me.BrwanameTextBox.Text)

文字列連結の一部。このようにして、間違った書式設定ルールを使用して数値または日付を意図した値を渡す危険がありません (数値または日付の値を単一引用符で囲む必要はありません)。

もちろん、これにより、他の人 (Cody Gray) がコメントで述べた Sql インジェクションの問題も回避されます。

于 2013-04-26T22:29:22.120 に答える