【问题标题】:Deleting record using SQL stored procedure from VB.net form从 VB.net 表单中使用 SQL 存储过程删除记录
【发布时间】:2016-01-03 15:18:06
【问题描述】:

我已经编写了下面的代码来从多个数据库表中删除记录,但是它没有删除任何记录并且也没有显示任何错误!有人可以帮忙吗?

    Private Sub btndelete_Click(sender As Object, e As EventArgs) Handles btndelete.Click
        Try
       cmd = New SqlCommand("IF EXISTS(SELECT * FROM book WHERE isbn = @isbn) " _
    & " BEGIN " _
    & " delete from published_by where isbn = @isbn; " _
    & " delete from return where isbn = @isbn; " _
    & " delete from issue where isbn = @isbn; " _
    & " delete from book where isbn = @isbn;" _
    & " SELECT 1; " _
    & " END " _
    & " ELSE SELECT 0", cn)
            cmd.Parameters.Add(New SqlParameter("@isbn", SqlDbType.VarChar, 13) _ 
 With {.Value = isbn})
            If cn.State = ConnectionState.Closed Then
                cn.Open()
            End If
            Dim returnValue As Integer = CInt(cmd.ExecuteScalar())
            If returnValue = 1 Then
                lblAlert.Text = ""
                lblInfo.Text = "Deleted"
            Else
                lblAlert.Text = "No Record Available"
                lblInfo.Text = ""
            End If
        Catch sqlEx As SqlException
            Select sqlEx.Number
                Case -1, 2, 53
                    MessageBox.Show("Connection Failed to Database")
            End Select
        Catch ex As Exception
            MessageBox.Show(ex.Message)
        End Try
    End If
End Sub

【问题讨论】:

  • 它会改变任何用户界面吗?例如,您将一些标签文本设置为“已删除”或“无可用记录”,是否会发生这种情况?
  • 您说您正在使用存储过程。存储过程存在于 SQL Server 中,您可以从代码中按名称调用它们。为什么代码里有存储过程的定义(全SQL)?
  • 我认为 DELETE 和 SELECT 语句后的分号可能是问题所在。你试过没有这些的代码吗?
  • @YacoubMassad 不,它不显示标签文本,即“已删除”
  • 尝试将方括号放在“return”周围,如下所示:delete from [return]

标签: sql-server vb.net stored-procedures


【解决方案1】:

“return”是一个保留字(见this reference)。要解决此问题,请将其放在方括号中,如下所示:

delete from [return] where isbn ...

关于您的代码的另一个注意事项是,如果错误编号不是 -1、2 或 53,您正在吞下 SqlException。要解决此问题,请处理它不是以下数字之一的情况:

Select Case sqlEx.Number
    Case -1, 2, 53
        Console.WriteLine("Connection Failed to Database")
    Case Else
        Console.WriteLine(....) 'write something here, you can use sqlEx.Message
End Select

这就是您一开始没有收到错误消息的原因。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-28
    • 1970-01-01
    • 2020-04-24
    • 2013-05-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多