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

发生了两种情况之一:数据没有更新,或者数据更新了,但是当您之后查找它时却丢失了它。ExecuteNonQuery 通常返回操作的行数。如果它为零,那么它可能毫无例外地失败。这可能与重复 ID 有关。

如果插入成功,则由于某种原因您看不到新记录。也许您在寻找错误的地方,或者由于某种原因该记录没有出现在查询中。我不知道默认情况下“重复更新”的任何内容,但如果 Access 有它可能会导致问题。

于 2012-11-24T23:00:58.307 回答
1

Dim ConnectionString As String = "myconnectionstring"

我使用 ADO 和 Delphi 连接到 Access,所以可能有点不同,但我想像这样的连接字符串你可能甚至没有连接到数据库,更不用说更新它了。

con.Open() 可能是一个函数,它将返回某种指示连接成功或失败的结果。Open 和 ExecuteNonQuery 命令的失败可能不会导致引发异常,在这种情况下,您的成功消息将显示连接是否已实现。异常不是唯一的错误类型。通常,如果函数返回指示成功或失败的结果,您应该在条件语句中查询该结果以确定是否处理或显示错误消息。在异常处理程序中包装大量代码是懒惰的,并且在许多情况下没有用处。

于 2012-11-24T23:21:04.123 回答
0

我能看到的唯一可能的问题是数据库中的 ID 字段是否是自动增量字段,否则它应该可以工作。或者,我发现以下方法更简单

使用表适配器和数据集插入新数据如下

Me.OrdersTableadapter.insert(ID, tableNumber, orderDate, TotalPrice) '注意:此方法的参数将按您的表格列顺序排列 Me.OrdersTableadapter.Fill(me.Dataset.Orderstableadapter)

于 2012-11-28T10:24:58.347 回答