我正在尝试将datagridview控件中的数据插入到我的SQL数据库中。代码如下:
Private Sub MCmdSoftwareSave_Click(sender As Object, e As EventArgs) Handles MCmdSoftwareSave.Click
Dim ID As Integer
Dim Name, Edition, Version, SubVersion As String
Try
SQLcmd.Connection = SQLconn
SQLconn.Open()
For row As Integer = 0 To Me.DgdSoftware.Rows.Count - 1
ID = Me.DgdSoftware.Rows(row).Cells(0).Value
Name = Me.DgdSoftware.Rows(row).Cells(1).Value
Edition = Me.DgdSoftware.Rows(row).Cells(2).Value
Version = Me.DgdSoftware.Rows(row).Cells(3).Value
SubVersion = Me.DgdSoftware.Rows(row).Cells(4).Value
SQLcmd.CommandText = "INSERT INTO Software(ID,Name,Edition,Version,SubVersion) VALUES('" & ID & "','" & Name & "','" & Edition & "','" & Version & "','" & SubVersion & "')"
SQLcmd.ExecuteNonQuery()
Next
MsgBox("The infomration was successfully added to the Software database.", MsgBoxStyle.Information, "Successful Operation")
Catch ex As Exception
MessageBox.Show(ex.Message)
SQLconn.Close()
End Try
End Sub
当表为空时,它会起作用,但它还会添加另一条记录,其中“ID”(主键)为0,并且在添加所需数据之前,该记录中的其余字段为空。
如果我然后尝试添加更多数据,我会收到一条消息,说我无法将数据添加到数据库中,其中保存的当前记录的ID与数据库中ID的ID相匹配(即它正在尝试重新保存现有数据进入表格。)
我想要做的是加载一个表格,其中表格中的所有数据都加载到datagridview控件中。然后,我想通过放入新记录,使用相同的datagridview控件添加到该表,而不需要代码尝试保存现有数据。我还希望能够编辑和删除datagridview控件中的数据。
有没有办法有效地做到这一点?
非常感谢,
詹姆斯
答案 0 :(得分:4)
我能想到的最简单的方法是在datagridview中添加另一列,您可以将其视为该行是否已插入数据库的指示器。将其默认为0,并在for循环中检查以仅插入该列的值为0的行,然后将其更新为1。
您还应该查看using parameterized SQL queries
如果您将AllowUserToAddRows设置为True,则datagridview底部会有一个空行。您可以通过将for循环更改为从0到Me.DgdSoftware.Rows.Count - 2来解决此问题。
答案 1 :(得分:2)
补充@obl的答案,请阅读datagridview events文档。
您可以使用CellEndEdit
事件标记一行,并在您点击保存按钮时知道是否需要删除或更新。