我正在尝试从我的SQL Server数据库中删除记录。我最初创建此代码以使用Microsoft Access,但我已决定将其转换为使用MS SQL 2008。
现在这就是我所拥有的:
Dim dbConnection As SqlConnection
Dim dbCommand As SqlCommand
Dim strSQL As String
Dim dgvSelectRow As Integer 'Represents the selected row in the DataGridView
Public Sub SQLConnect()
dbConnection = New SqlConnection("Data Source=w7gbnewmfg2143\sqlexpress;Initial Catalog=master_plan;Integrated Security=True")
dbConnection.Open()
End Sub
Public Sub SQLCommand()
dbCommand = New SqlCommand(strSQL, dbConnection)
End Sub
Public Sub SQLDisconnect()
dbConnection.Close()
End Sub
Private Sub btnRemove_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnRemove.Click
If dgvLine1.RowCount = 0 Then
MsgBox("No Rows to Delete")
Else
dgvSelectRow = dgvLine1.CurrentRow.Index
If MsgBox("Are you sure to remove this job?", MsgBoxStyle.Critical + MsgBoxStyle.YesNo, "Remove Job") = MsgBoxResult.Yes Then
SQLConnect()
strSQL = "DELETE FROM [LinePlan] WHERE DateTime = '" & dgvLine1.Item(8, dgvSelectRow).Value & "'" 'Removes selected row from DataGridView at position column 8
SQLCommand()
dbCommand.ExecuteNonQuery()
SQLDisconnect()
tmrUpdate.Enabled = True
tmrUpdate.Start()
Else
End If
End If
End Sub
基本上我试图从DataGridView中的选定行中删除记录。在该行中,它删除了我的DGV中列的atTime时间值。现在,当我在MS Access中创建此查询时,我完全没有任何问题,它完美地工作。现在我已将它迁移到MS SQL,我遇到了各种各样的问题。我得到了很多语法错误,我现在已经解决了(我认为)。我一直在使用Catch ex As Exception来尝试确定任何错误。我现在已经清除了所有错误。现在当我单击删除按钮时,我没有收到任何错误,但是记录没有删除,它仍然保留在数据库中。程序不会崩溃或显示任何错误,似乎它已经完成了它需要做的事情,但它不会删除记录。我尝试过使用不同的连接字符串方法,但无济于事。我已经尝试过不使用变量,只是手动输入数据,但仍然没有运气。
我是否直接错过了什么?因为我无法弄清楚问题是什么。这似乎是一个非常直接的查询,并没有想到真的可能会出错,但我有多么错误:)。
非常感谢任何帮助或指导。谢谢你的时间!
此致 詹姆斯
答案 0 :(得分:2)
尝试使用参数化查询
strSQL = "DELETE FROM [LinePlan] WHERE DateTime = @dtValue"
SQLCommand()
dbCommand.Parameters.AddWithValue("@dtValue", Convert.ToDateTime(dgvLine1.Item(8, dgvSelectRow).Value)
dbCommand.ExecuteNonQuery()
这应该更好,因为您将正确的格式化日期时间值传递给数据库引擎,而不是尝试传递您认为数据库格式正确的字符串。
......我忘记了别的什么? ......啊是的,亲吻再见Sql Injection