我有一个使用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
有什么问题?
答案 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)