古いvb6コードはひどいものでした。SQLインジェクションに対して脆弱であり、結果をクライアントに戻す必要がないため、非常に非効率的でした。vb6でも、どちらにも言い訳はありません。vb.netの移行に関するこれらの問題の両方を修正しましょう。新しいコードは次のようになります。
Public Sub InsertName(ByVal Name As String)
'This sql code will update your database in the same way as your original, but
' will do so faster because you only need to make one call to the database
' and you never need to read any data back to the client
Dim sql As String = _
"INSERT INTO Table (Name) " & _
" SELECT @Name WHERE NOT EXISTS (select * from table where id = 1)"
'The using blockwill make sure the connection is closed, even if an exception is thrown
Using cn As New SqlConnection("My connection string"), _
cmd As New SqlCommand(sql, cn)
'Query parameters are the ONLY acceptable way to substitute data in your sql statements
'NEVER use string concatenation. This is IMPORTANT
'I have to guess at your column type here. Use the actual column type in your own code
cmd.Parameters.Add("@Name", SqlDbType.NVarChar, 50).Value = Name
cn.Open()
cmd.ExecuteNonQuery()
End Using
End Sub
そして、次のような関数を呼び出します。
InsertName(Text1.Text)
このコードで示したテクニックのほとんどは利用可能であり、vb6でのベストプラクティス、つまり、vb6での操作方法が異なっていても、より優れたSQLパラメーターとクエリパラメーターであることに注意してください。