0

ユーザーが入力したデータに基づいて SQL を使用してデータベースを更新するプログラムの更新ステートメントを作成しようとしています。何か助けがあれば、それは大歓迎です。

Private Sub btnsave_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnsave.Click

    Dim con As New OleDb.OleDbConnection

    Dim d1 As New OleDb.OleDbDataAdapter
    Dim d2 As New OleDb.OleDbDataAdapter
    Dim d3 As New OleDb.OleDbDataAdapter
    Dim d4 As New OleDb.OleDbDataAdapter
    Dim d5 As New OleDb.OleDbDataAdapter
    Dim d6 As New OleDb.OleDbDataAdapter
    Dim d7 As New OleDb.OleDbDataAdapter
    Dim d8 As New OleDb.OleDbDataAdapter
    Dim d9 As New OleDb.OleDbDataAdapter
    Dim d10 As New OleDb.OleDbDataAdapter

    Dim dt As New DataTable("Animals")

    'uses the 2010 compatible connection string
    con.ConnectionString = "PROVIDER=Microsoft.ACE.OLEDB.12.0;Data Source = h:\Animals.accdb"
    con.Open()

    MsgBox("UPDATE Animals SET LatinName = '" & latintxt.Text & "'" & " WHERE AnimalName = " & "'" & Form1.txtname.Text & "'")
    d1 = New OleDb.OleDbDataAdapter("UPDATE Animals SET LatinName = '" & latintxt.Text & "'" & " WHERE AnimalName = " & "'" & Form1.txtname.Text & "'", con)
    d2 = New OleDb.OleDbDataAdapter("UPDATE Animals SET LocationFound = '" & locationtxt.Text & "'" & " WHERE AnimalName = " & "'" & Form1.txtname.Text & "'", con)
    d3 = New OleDb.OleDbDataAdapter("UPDATE Animals SET AverageHeight = '" & heighttxt.Text & "'" & " WHERE AnimalName = " & "'" & Form1.txtname.Text & "'", con)
    d4 = New OleDb.OleDbDataAdapter("UPDATE Animals SET AverageWeight = '" & weighttxt.Text & "'" & " WHERE AnimalName = " & "'" & Form1.txtname.Text & "'", con)
    d5 = New OleDb.OleDbDataAdapter("UPDATE Animals SET DietaryNeeds = '" & diettxt.Text & "'" & " WHERE AnimalName = " & "'" & Form1.txtname.Text & "'", con)
    d6 = New OleDb.OleDbDataAdapter("UPDATE Animals SET ConservationStatus = '" & statustxt.Text & "'" & " WHERE AnimalName = " & "'" & Form1.txtname.Text & "'", con)
    d7 = New OleDb.OleDbDataAdapter("UPDATE Animals SET AverageLifeSpan = '" & lifetxt.Text & "'" & " WHERE AnimalName = " & "'" & Form1.txtname.Text & "'", con)
    d8 = New OleDb.OleDbDataAdapter("UPDATE Animals SET BreedingSeason = '" & breedtxt.Text & "'" & " WHERE AnimalName = " & "'" & Form1.txtname.Text & "'", con)
    d9 = New OleDb.OleDbDataAdapter("UPDATE Animals SET AverageLength = '" & lengthtxt.Text & "'" & " WHERE AnimalName = " & "'" & Form1.txtname.Text & "'", con)
    d10 = New OleDb.OleDbDataAdapter("UPDATE Animals SET AnimalName = '" & nametxt.Text & "'" & " WHERE AnimalName = " & "'" & Form1.txtname.Text & "'", con)

    d1.Fill(dt)
    d2.Fill(dt)
    d3.Fill(dt)
    d4.Fill(dt)
    d5.Fill(dt)
    d6.Fill(dt)
    d7.Fill(dt)
    d8.Fill(dt)
    d9.Fill(dt)
    d10.Fill(dt)

    con.Close()

End Sub
4

2 に答える 2

1

あなたの機能は非常に非効率的です。OleDB.OleDBCommandデータアダプターの代わりにを使用する必要があります。データアダプターは主に、データベースを更新するのではなく、データベースからデータを取得するために使用されることになっています。それらを使用してデータを更新することはできますが、それを行っている方法ではありません。

関数を次のように変更してみてください。

Using cn As New OleDbConnection(YOURCONNECTIONSTRING)
    Dim cSQL As String = "THIS WILL BE YOUR SQL"
    Dim cmd As New OleDbCommand(cSQL, cn)
    Try
        If cn.State <> ConnectionState.Open Then cn.Open()
        cmd.ExecuteNonQuery()

        'Now reset cSQL to your second SQL string and recreate your OleDbCommand with the new string.'
        cSQL = "NEW SQL STRING"
        cmd = New OleDbCommand(cSQL, cn)
        cmd.ExecuteNonQuery()

        'Now repeat your process as many times as you like.'
    Catch ex As Exception
        'Handle any errors here.'
    End Try
End Using

そうは言っても、他の人が言及したように、すべての入力にコマンドパラメーターを使用する必要があります。これは少し上級者向けなので、自分の時間にグーグルで検索して、その方法を独学する必要があります。プロセス全体を説明する非常に多くのチュートリアルがあります。パラメーターの使用方法を習得すれば、将来のプロジェクトをハッカーや悪意のあるユーザーから保護するための準備が整います。

于 2013-04-08T21:03:18.780 に答える