【问题标题】:VB .NET SQL Delete query not workingVB .NET SQL 删除查询不起作用
【发布时间】:2013-04-12 10:02:05
【问题描述】:

我有一个大程序试图从我的 SQL Servers 数据库中删除一条记录。我最初创建此代码是为了使用 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 中列处的 DateTime 值。现在,当我在 MS Access 中创建此查询时,我完全没有问题,它运行良好。现在我已经将它迁移到 MS SQL,我遇到了各种各样的问题。我得到了很多我现在已经解决的语法错误(我认为)。我一直在使用 Catch ex As Exception 来尝试确定任何错误。我现在已经清除了所有错误。现在,当我单击删除按钮时,我没有收到任何错误,但是记录并没有删除,它仍然保留在数据库中。该程序不会崩溃或显示任何错误,并且似乎已经完成了它需要做的事情,但它不会删除记录。我尝试过使用不同的连接字符串方法,但无济于事。我已经尝试过不使用变量而只是手动输入数据,但仍然没有运气。

我是否错过了一些直接的东西?因为我无法弄清楚问题可能是什么。这似乎是一个非常直接的查询,并没有想到真的会出错,但我错了:)。

任何帮助或指导将不胜感激。感谢您的宝贵时间!

问候, 詹姆斯

【问题讨论】:

  • 我认为你的 sql 命令条件没有得到满足。比如 DateTime= 'dgvLine1.Item(8, gvSelectRow).Value' 或者日期时间的格式可能与您的传递参数不匹配

标签: .net sql vb.net


【解决方案1】:

尝试使用参数化查询

strSQL = "DELETE FROM [LinePlan] WHERE DateTime = @dtValue"
SQLCommand()
dbCommand.Parameters.AddWithValue("@dtValue", Convert.ToDateTime(dgvLine1.Item(8, dgvSelectRow).Value)
dbCommand.ExecuteNonQuery()

这应该会更好,因为您将传递正确格式化的日期时间值的工作留给数据库引擎,而不是尝试传递您认为数据库格式正确的字符串。

...我忘记了别的东西? ....啊是的,吻别Sql Injection

【讨论】:

  • 非常感谢您解决了我的问题,非常感谢您:) 我会查看参数以增加我的知识。再次感谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-05
  • 2017-02-25
  • 2015-10-01
  • 2015-03-25
  • 1970-01-01
  • 2021-09-09
相关资源
最近更新 更多