Ошибка обновления базы данных MySQL: DUPLICATE DEFAULT ENTRY FOR PRIMARY KEY = '0' - PullRequest
0 голосов
/ 27 августа 2011

У меня есть MySQL dsetup с именем in-out, и я написал клиентскую программу vb.NET, чтобы получать информацию из таблицы в базе данных, отображать ее в виде таблицы данных, а затем разрешать пользователю редактировать эту информацию иобновите его на сервере.

Сейчас я размещаю сервер на своем ноутбуке Gateway, а также подключаюсь к нему с того же ноутбука, поэтому в качестве имени сервера я использую localhost.Моя проблема в том, что когда я захожу в программу и изменяю информацию и нажимаю кнопку обновить, ничего не происходит ... Информация остается прежней, но нет никаких признаков ошибки, сбоя синтаксиса или сбоя программы.

Я попытался запустить это на другом компьютере в моем доме, и я получил те же результаты.Я могу получить доступ к информации без проблем, но при ее обновлении возникают проблемы.Если бы у меня была проблема с моим кодом, он вывел бы какую-то ошибку или попросил бы отладить мой скрипт, что значительно облегчило бы его решение, поэтому я уверен, что это как-то связано с моей базой данных.

Прежде чем перейти к этому шагу, я продолжал получать сообщение об ошибке при извлечении информации, в которой было указано что-то вроде

DUPLICATE DEFAULT ENTRY FOR PRIMARY 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

1 Ответ

1 голос
/ 27 августа 2011

Кажется, у вас какая-то проблема с транзакцией ...

попробуйте добавить myCommand.Connection.Close(); после ExecuteNonQuery()

EDIT - согласно комментарию:

Некоторые ссылки для изучения SQL:

РЕДАКТИРОВАТЬ 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 соответственно ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...