1

Access データベースを使用する Visual Basic プロジェクトがあります。クエリを実行しましたが、データベース テーブルに新しいデータが表示されません。例外やエラーはありません。代わりに、成功メッセージ ボックスが表示されます。これが私のコードです:

    Dim ID As Integer = 2
    Dim TableNumber As Integer = 2
    Dim OrderDate As Date = Format(Now, "General Date")
    Dim TotalPrice As Double = 100.0
 Dim ConnectionString As String = "myconnectionstring"
    Dim con As New OleDb.OleDbConnection(ConnectionString)


    Try
        Dim InsertCMD As OleDb.OleDbCommand

        InsertCMD = New OleDb.OleDbCommand("INSERT INTO Orders([ID],[TableNumber],[OrderDate],[TotalPrice]) VALUES(@ID,@TableNumber,@OrderDate,@TotalPrice);", con)
        InsertCMD.Parameters.AddWithValue("@ID", ID)
        InsertCMD.Parameters.AddWithValue("@TableNumber", TableNumber)
        InsertCMD.Parameters.AddWithValue("@OrderDate", OrderDate)
        InsertCMD.Parameters.AddWithValue("@TotalPrice", TotalPrice)

        con.Open()
        InsertCMD.ExecuteNonQuery()
        MessageBox.Show("Successfully Added New Order",
                        "Success", MessageBoxButtons.OK, MessageBoxIcon.Information)
        con.Close()
    Catch ex As Exception
        'Something went wrong
        MessageBox.Show(ex.ToString)
    Finally
        'Success or not, make sure it's closed
        If con.State <> ConnectionState.Closed Then con.Close()
    End Try

何が問題ですか?

4

3 に答える 3

1

次の 2 つのいずれかが発生しています。データが更新されていないか、更新されていて後で検索したときにデータが失われています。ExecuteNonQuery は通常、処理された行数を返します。ゼロの場合、例外なく失敗している可能性があります。これは、ID の重複に関係している可能性があります。

正常に挿入されている場合は、何らかの理由で新しいレコードが表示されていません。探している場所が間違っているか、何らかの理由でレコードがクエリで表示されない可能性があります。デフォルトで「重複更新時」になっていることは何も知りませんが、Access にそれがある場合、問題が発生する可能性があります。

于 2012-11-24T23:00:58.307 に答える
1

Dim ConnectionString As String = "myconnectionstring"

私はDelphiでADOを使用してAccessに接続しているので、少し異なるかもしれませんが、データベースを更新するどころか、データベースに接続することすらしていないような接続文字列を想像します。

con.Open() はおそらく、接続の成功または失敗を示す何らかの結果を返す関数です。Open および ExecuteNonQuery コマンドが失敗しても、例外が発生しない場合があります。その場合、接続が確立されたかどうかにかかわらず、成功メッセージが表示されます。エラーの種類は例外だけではありません。通常、関数が成功または失敗を示す結果を返す場合は、条件ステートメントでそれをクエリして、処理するかエラー メッセージを表示するかを決定する必要があります。例外ハンドラでコードのスワスをラップするのは面倒で、多くの場合役に立ちません。

于 2012-11-24T23:21:04.123 に答える
0

私が見ることができる唯一の問題は、データベースの ID フィールドが自動インクリメント フィールドであるかどうかです。それ以外の場合は機能するはずです。または、次の方法がはるかに簡単だと思います

テーブル アダプターとデータ セットを使用して、次のように新しいデータを挿入します。

Me.OrdersTableadapter.insert(ID, tableNumber, orderDate, TotalPrice) 'NB: このメソッドのパラメーターは、テーブル列の順序になります Me.OrdersTableadapter.Fill(me.Dataset.Orderstableadapter)

于 2012-11-28T10:24:58.347 に答える