当存在结果集时,vb6无法识别错误

时间:2010-12-27 13:23:27

标签: stored-procedures vb6

  

我有一个存储过程   返回带有错误的结果集   消息,发生错误时。如果它   执行没有任何错误,结果   set为空(命令已完成   成功)

     

在vb6方面,我执行sp和   

检查是否有错误
If Err <> 0 Then
 ' do sth
End If
     

但是,当有结果集时,   Err总是0。

     

我应该如何处理这种情况?


对于不充分的解释感到抱歉。

以下是我的脚本:

--my sample table
create table #InvoiceDocument (InvoiceID int, ItemID int, Price float, DocStatus bit)

--my test values
insert into #InvoiceDocument (InvoiceID, ItemID, Price)
values (1, 1, 2.5), (1, 2, 5.0), (1,5, null)


--my sample procedure
create procedure sp_ApproveInvoice @InvoiceID int
as
begin

    set nocount on

    select * into #temp
    from #InvoiceDocument
    where Price is null and InvoiceID = @InvoiceID

    if exists (select 1 from #temp)
    begin
        select InvoiceID, ItemID, Price from #temp 
        RAISERROR ('There are non priced items. Invoice can not be approved!',16, 1)    
        return   
    end

    update #InvoiceDocument
    set DocStatus = 1
    where InvoiceID = @InvoiceID

end

执行此操作时:

sp_ApproveInvoice 1

它都生成结果集(Results)和错误消息(Messages)。

在vb6方面,vb6无法在此处捕获错误。

2 个答案:

答案 0 :(得分:4)

您需要在存储过程中使用RAISERROR来设置错误。

或使用输出参数。或RETURN语句

或添加逻辑以区分客户端代码中的“成功”和“失败”记录集。

目前,Err没有意义,因为没有错误状态

我个人使用RAISERROR question here this template

答案 1 :(得分:4)

您的特定情况无法被Err捕获,因为您的存储过程不会产生传统意义上的任何错误 - 它要么给出空结果集,要么给出正常结果集。 VB如何知道非空结果集的语义?

要使其工作,您需要更改存储过程以引发错误,或者您需要直接在代码中检查存储过程返回的结果集(与Err无关)。