表thdpurbackm  update trigger如下:  
IF @@ERROR <> 0
begin
rollback
raiserror('更新库存失败!库存不能为负数。',16,1)
end
前端代码如下:
        lcmd.CommandText = "  UPDATE thdpurbackm  " & _
                            " SET fstate = 'C' ,fcheckman='" & Pub_username & "', fcheckdate = '" &  GetDateTime() & "'" & _
                            " WHERE ( fhdshopno = '" & ls_fhdshopno & "' ) AND  " & _
                            "       ( fbackno = '" & ls_fbackno & "' )  "        Try
            lcmd.ExecuteNonQuery()
        Catch sqlerr As SqlException
            MessageBox.Show(sqlerr.Message)
        Catch ex As Exception
            MessageBox.Show(ex.Message)
        End Try
问题点:
资料没有更新成功,单怎么捕获不到任何异常。
如改为如下无条件执行就可以么捕获到异常,但这不是我要的效果.
IF @@ERROR <> 0
rollback
raiserror('更新库存失败!库存不能为负数。',16,1)

解决方案 »

  1.   

    为什么不在前端代码中判断数据是否合法再进行更新?
    sql不能把所有的异常捕获,特别是业务逻辑层面的,比如你定义库存是int型 它的范围是从-2,147,483,648到 2,147,483,647 这种情况下sql就会认为负数也是正常数据,不会抛出异常  
      

  2.   

    sql语句估计没错,但值啊什么的可能错了
      

  3.   

    如改为如下无条件执行就可以么捕获到异常,但这不是我要的效果. 
    IF @@ERROR  < > 0 
    rollback 
    raiserror( '更新库存失败!库存不能为负数。 ',16,1) 
    --------------------------------------------------------------
    改成这样你的:raiserror( '更新库存失败!库存不能为负数。 ',16,1) 始终都要执行吧