2011-08-27 120 views
0

好吧,我有一個名爲in-out的Mysql dsetup,我寫了一個vb.net客戶端程序,從數據庫的表中獲取信息,將其顯示在數據網格視圖中,然後允許用戶編輯此信息並更新它在服務器上。更新MySQL數據庫問題....幫助?

現在我在我的Gateway筆記本電腦上託管服務器,並且也從同一檯筆記本電腦連接到服務器,因此我使用localhost作爲服務器名稱。我的問題是,當我進入程序並更改信息並單擊更新時,沒有任何反應......信息保持不變,但沒有出現錯誤,語法錯誤或程序崩潰的跡象。

我試過在我家的另一臺電腦上運行這個,我得到了相同的結果。我可以毫無困難地訪問信息,但更新它就是我遇到麻煩的地方。如果我的代碼有問題,它會顯示某種錯誤或要求我調試我的腳本,這會使它更容易解決,因此我確信它與我的數據庫有關。

之前,我得到了這一步,我不停地檢索該說的一樣

DUPLICATE默認項主鍵=「0」

這意味着該信息時,得到一個錯誤與此錯誤相關的表中的列不能有多個默認值'0',但現在已經消失...(儘管我沒有改變任何東西)

這是將重新創建我的數據庫的腳本佈局。只需在MySql WorkBench或MySql Query Browser中運行它(或者您用來管理Sql數據庫的東西)。請告訴我我做錯了什麼,因爲我需要在十二月之前完成這個程序! (4個月了)

http://www.megaupload.com/?d=VA639MP5

這裏是我的更新代碼:(以防萬一,問題出在我的程序不是數據庫)

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管理:MySQL工作臺5.2.34 CE

如果您需要任何其他細節只是讓我知道,因爲現在我不能想別的,你會需要提供任何幫助:P

謝謝!

回答

1

似乎你有某種交易問題......

嘗試將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_idcreator一起標識行唯一。 ..並更新timestampstatus列相應...

+0

那沒有幫助...我認爲它已經與「ExecuteNonQuery()」函數有關,因爲這是我的更新代碼和我的刷新代碼之間唯一真正的區別......你能解釋一下執行非查詢函數完全是什麼嗎?或者可能是一個替代更新代碼? – daniel11

+0

ExecuteNonQuery告訴數據庫執行你的代碼......但不期望某種類型的CURSOR像SELECT一樣會返回...因此可以用於INSERT/UPDATE/DELETE等...請詳細解釋你想要實現和什麼不工作... – Yahia

+0

我想從我的數據庫中獲取信息,將其顯示在datagridview控件中,能夠使用預先定義的組合框選擇更改顯示在datagridview控件中的信息,以及最後,使用datagridview控件中的信息更新數據庫上的信息。更新腳本(在原始文章中找到)完全不起作用。我可以更改datagridview上的信息,但它不會在數據庫上更改它... – daniel11