-2

私はVB.Netを初めて使用します。古いVB6コードは次のとおりです。

Set conn = my connection string
conn.open
Set ce = conn.Execute("select * from table where id = 1")
If ce.EOF Then conn.Execute ("insert into table set name = '" & Text1.Text & "'")

SQLテーブルフィールドを取得したいのですが、eofの場合は、VB.NETを使用してレコードを追加します。手伝ってくれてありがとう。

4

1 に答える 1

3

古い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パラメーターとクエリパラメーターであることに注意してください。

于 2012-12-06T15:21:28.393 に答える