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

mysql database vb.net sql-update

463 观看

1回复

1147 作者的声誉

我调用了一个MySQL dsetup in-out,我编写了一个vb.NET客户端程序,用于从数据库中的表中获取信息,将其显示在数据网格视图中,然后允许用户编辑此信息并在服务器上进行更新。

现在我在我的Gateway笔记本电脑上托管服务器,并从同一台笔记本电脑连接到它,因此我localhost用作服务器名称。我的问题是,当我进入程序并更改信息并单击更新时,没有任何反应......信息保持不变,但没有错误,语法失败或程序崩溃的迹象。

我试过在我家里的另一台电脑上运行它,我得到了相同的结果。我可以毫不费力地访问信息,但更新它是我遇到麻烦的地方。如果我的代码出现问题,它会显示某种错误或要求我调试我的脚本,这会使它更容易解决,因此我确信它与我的数据库有关。

在我开始这一步之前,我在检索说出类似内容的信息时一直出错

初级KEY ='0'的重复默认输入

这意味着表中与此错误相关的列不能有多个默认值'0',但现在已经消失了......(即使我没有更改任何内容)

这是将重新创建数据库布局的脚本。只需在MySQL WorkBench或MySQL Query Browser(或者您用来管理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
  • 服务器名称:'Localhost'
  • SQL Manager:MySQL Workbench 5.2.34 CE
作者: daniel11 的来源 发布者: 2011 年 8 月 27 日

回应 (1)


1

63670 作者的声誉

决定

似乎你有某种交易问题......

尝试添加myCommand.Connection.Close();之后ExecuteNonQuery()

编辑 - 根据评论:

学习SQL的一些链接:

编辑2:

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

由于没有有关数据模型足够的细节上面UPDATE的语句假定列user_idmessage_idcreator在一起标识行唯一...和更新timestamp,并status相应地列...

作者: Yahia 发布者: 27.08.2011 04:39
32x32