正确的代码但无法插入数据库

时间:2012-11-24 13:49:27

标签: database vb.net visual-studio-2010 ms-access insert

我有一个使用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

有什么问题?

3 个答案:

答案 0 :(得分:1)

正在发生的两件事情之一:数据没有得到更新,或者它正在更新,当你以后查找它时你就会错过它。 ExecuteNonQuery通常返回作用的行数。如果它为零,那么它可能会在没有例外的情况下失败。这可能与重复的ID有关。

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

答案 1 :(得分:1)

Dim ConnectionString As String =“myconnectionstring”

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

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

答案 2 :(得分:0)

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

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

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