![](/img/trans.png)
[英]multiple datagridview data update to database mysql - vb.net
[英]Update all data in columns in Datagrid except ID (MySQL Database VB.NET)
這是我程序的功能。 這是一個患者管理系統,該系統具有添加,刪除和更新的功能,但是我編碼了一個自動生成隨機密鑰,它將創建隨機密鑰,我在Mysql database
ID
列上未選中主鍵,數據類型為INT
,因此程序將在添加記錄時自動生成隨機IDs
,而不是MySql數據庫自動生成ID(按數字順序)。 問題是,當我單擊“更新”按鈕時,它表明我的語法不正確,有時會顯示“鍵PRIMARY的重復輸入鍵'xxxxx'” ,這意味着它已重復或替換或再次保存了ID。 我的問題是
如何在不更改或影響ID鍵的情況下更新列中的所有記錄?
Private Sub btnUpdate_Click(sender As Object, e As EventArgs) Handles btnUpdate.Click
MySqlConn = New MySqlConnection
MySqlConn = New MySqlConnection("server=localhost;user id=root;password=root;database=PatientManagementSystem;")
MySqlConn.Open()
Dim cmd As MySqlCommand = MySqlConn.CreateCommand
cmd.CommandText = String.Format("UPDATE newpatient SET " &
"ID='{0}', " &
"Lastname='{1}', " &
"Firstname= '{2}', " &
"Middlename= '{3}', " &
"Age= '{4}', " &
"Gender= '{5}', " &
"Address= '{6}', " &
"Occupation= '{7}', " &
"Month= '{8}', " &
"Day= '{9}', " &
"Year= '{10}'",
txtID.Text,
txtFirstname.Text,
txtFirstname.Text,
txtMiddlename.Text,
txtAge.Text,
cmbGender.SelectedItem,
txtAddress.Text,
txtOccupation.Text,
cmbMonth.SelectedItem,
cmbDay.SelectedItem,
cmbYear.SelectedItem)
Dim affectedRows As Integer = cmd.ExecuteNonQuery
If affectedRows > 0 Then
MsgBox("Record successfully updated!", MsgBoxStyle.Information, "Success")
Else
MsgBox("Updating record failed.", MsgBoxStyle.Critical, "Failed")
End If
MySqlConn.Close()
End Sub
Private Sub btnSave_Click(sender As Object, e As EventArgs) Handles btnSave.Click
'AUTO GENERATE RANDOM IDs
Dim random As New Random
Dim id As Integer
id = (random.Next(100000000, 1000000000))
txtID.Text = id
MySqlConn = New MySqlConnection
MySqlConn = New MySqlConnection("server=localhost;user id=root;password=root;database=PatientManagementSystem;")
MySqlConn.Open()
Dim cmd As MySqlCommand = MySqlConn.CreateCommand
cmd.CommandText = String.Format("INSERT INTO newpatient (ID, Lastname, Firstname, Middlename, Age, Gender, Address, Occupation, Month, Day, Year )" &
"VALUES ('{0}' , '{1}' ,'{2}' ,'{3}' ,'{4}' ,'{5}' , '{6}', '{7}', '{8}', '{9}', '{10}' )",
txtID.Text,
txtLastname.Text,
txtFirstname.Text,
txtMiddlename.Text,
txtAge.Text,
cmbGender.SelectedItem,
txtAddress.Text,
txtOccupation.Text,
cmbMonth.SelectedItem,
cmbDay.SelectedItem,
cmbYear.SelectedItem)
Dim affectedrows As Integer = cmd.ExecuteNonQuery()
If affectedrows > 0 Then
MsgBox("Record successfully saved!", MsgBoxStyle.Information, "Success")
Dim adapter As New MySqlDataAdapter
Dim DataSet As New DataTable
Dim binding As New BindingSource
'REFRESH DATAGRID
Try
frmOld_Patient.Show()
Dim query As String
Dim cmd1 As MySqlCommand
query = "SELECT * FROM PatientManagementSystem.newpatient"
cmd1 = New MySqlCommand(query, MySqlConn)
adapter.SelectCommand = cmd1
adapter.Fill(DataSet)
binding.DataSource = DataSet
frmOld_Patient.dgvRecords.DataSource = binding
adapter.Update(DataSet)
MySqlConn.Close()
frmOld_Patient.Select()
Catch ex As Exception
MessageBox.Show(ex.Message)
Finally
MySqlConn.Dispose()
End Try
Else
MsgBox("Saving record failed.", MsgBoxStyle.Critical, "Failed")
End If
MySqlConn.Close()
End Sub
您的Update statement
沒有Where
條件”,因此它將使用相同的ID
更新表中的所有行,從而說明為什么會出現該錯誤
編輯:只需將WHERE添加到您的更新語句中,就像這樣
cmd.CommandText = String.Format("UPDATE newpatient SET " &
"ID='{0}', " &
"Lastname='{1}', " &
"Firstname= '{2}', " &
"Middlename= '{3}', " &
"Age= '{4}', " &
"Gender= '{5}', " &
"Address= '{6}', " &
"Occupation= '{7}', " &
"Month= '{8}', " &
"Day= '{9}', " &
"Year= '{10}'" &
"WHERE ID={11}, ' here we add where
txtID.Text,
txtFirstname.Text,
txtFirstname.Text,
txtMiddlename.Text,
txtAge.Text,
cmbGender.SelectedItem,
txtAddress.Text,
txtOccupation.Text,
cmbMonth.SelectedItem,
cmbDay.SelectedItem,
cmbYear.SelectedItem,
yourID)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.