我有一个名为in-out
的MySQL dsetup,并且我编写了一个vb.NET客户端程序来从数据库中的表中获取信息,将其显示在数据 GridView 中,然后允许用户可以编辑此信息并在服务器上更新它。
现在,我在我的网关笔记本电脑上托管服务器,并从同一台笔记本电脑连接到它,因此我使用 localhost
作为服务器名称。我的问题是,当我进入程序并更改信息并单击更新时,没有任何反应...信息保持不变,但没有任何错误、语法失败或程序崩溃的迹象。
我尝试在我家的另一台计算机上运行它,得到了相同的结果。我可以顺利地访问这些信息,但更新它是我遇到麻烦的地方。如果我的代码有问题,它会显示某种错误或要求我调试我的脚本,这会让解决起来更容易,因此我确信它与我的数据库有关。
在执行此步骤之前,我在检索类似内容的信息时不断收到错误
DUPLICATE DEFAULT ENTRY FOR PRIMARY KEY = '0'
这意味着表中与此错误相关的列不能有多个默认值“0”,但现在已经消失了......(即使我没有更改任何内容)
这是将重新创建我的数据库布局的脚本。只需在 MySQL WorkBench 或 MySQL 查询浏览器(或者您用来管理 SQL 数据库的任何工具)中运行它即可。
这是我的更新代码:(以防万一问题出在我的程序而不是数据库)
Private Sub cmdupdate_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdupdate.Click
Dim conn As New MySqlConnection
Dim myCommand As New MySqlCommand
'#######
conn.ConnectionString = "server=" & frmLogin.txtserver.Text & ";" _
& "user id=" & frmLogin.txtusername.Text & ";" _
& "password=" & frmLogin.txtpassword.Text & ";" _
& "database=in_out"
'#######
myCommand.Connection = conn
myCommand.CommandText = "INSERT INTO event(user_id, message_id, timestamp, status, creator)" _
& "VALUES(?UserID, ?MessageID, NOW(), ?Status, ?Creator)"
myCommand.Parameters.AddWithValue("?UserID", myUserID)
myCommand.Parameters.AddWithValue("?MessageID", cbomessage.SelectedValue)
myCommand.Parameters.AddWithValue("?Status", cbostatus.SelectedItem)
myCommand.Parameters.AddWithValue("?Creator", myUserID)
Try
conn.Open()
myCommand.ExecuteNonQuery()
Catch myerror As MySqlException
MsgBox("There was an error updating the database: " & myerror.Message)
End Try
refreshStatus(dgvstatus)
End Sub
其他详细信息:
- 操作系统:Windows 7 Professional x64
- 软件:Visual Basic 2010 Express
- 服务器名称:“本地主机”
- SQL 管理器:MySQL Workbench 5.2.34 CE
最佳答案
您似乎遇到了某种交易问题...
尝试在 ExecuteNonQuery()
之后添加 myCommand.Connection.Close();
编辑 - 根据评论:
学习 SQL 的一些链接:
- http://www.w3schools.com/sql/default.asp
- http://www.sqlcourse.com/index.html
- http://www.sql-tutorial.net/
- http://www.mysqltutorial.org/
编辑2:
UPDATE event SET
timestamp = NOW(),
status = ?Status
WHERE user_id = ?UserID AND message_id = ?MessageID AND creator = ?Creator;
由于没有足够的有关数据模型的详细信息,以上 UPDATE
语句假定列 user_id
和 message_id
以及 creator
一起唯一地标识一行...并相应地更新 timestamp
和 status
列...
关于mysql - 更新 MySQL 数据库时出错 : DUPLICATE DEFAULT ENTRY FOR PRIMARY KEY = '0' ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7215825/