mysql - 更新 MySQL 数据库时出错 : DUPLICATE DEFAULT ENTRY FOR PRIMARY KEY = '0'

标签 mysql database vb.net sql-update

我有一个名为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 的一些链接:

编辑2:

UPDATE event SET
timestamp = NOW(), 
status = ?Status 
WHERE user_id = ?UserID AND message_id = ?MessageID AND creator = ?Creator;

由于没有足够的有关数据模型的详细信息,以上 UPDATE 语句假定列 user_idmessage_id 以及 creator 一起唯一地标识一行...并相应地更新 timestampstatus 列...

关于mysql - 更新 MySQL 数据库时出错 : DUPLICATE DEFAULT ENTRY FOR PRIMARY KEY = '0' ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7215825/

相关文章:

php - 在 php 和数据库中创建登录和注销 session

asp.net - 使用 ASP.NET 连接到 Access 数据库

mysql - 如何在分区数据库中保持唯一键唯一?

.net - VB.NET迭代器函数丢失局部变量

MySQL 5.6 错误 1054 : Unknown column in 'field list' on INSERT

java - 如何自定义jdbcTemplate.queryForMap()返回的map中值的类型?

php - 检查n个用户是否在同一个房间

mysql - 换行数据未在 vb.net 多行文本框中正确显示

c# - 有没有更快的方法来调试 ObjectARX 应用程序?

php - 如何在laravel 5.4 的迁移文件中使用原始mysql 语句?