VB6 не распознает ошибку, когда есть набор результатов - PullRequest
0 голосов
/ 27 декабря 2010

У меня есть хранимая процедура, которая возвращает набор результатов с ошибкой сообщение, когда возникает ошибка. Если оно выполняется без ошибок, результат набор пуст (команда выполнена) успешно)

На стороне 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 ]

4 голосов
/ 27 декабря 2010

Ваш конкретный случай не может быть зафиксирован с помощью Err, поскольку ваша хранимая процедура не генерирует никаких ошибок в традиционном смысле - она ​​либо дает пустой набор результатов, либо обычный набор результатов. Как VB может знать семантику непустого набора результатов?

Чтобы это работало, вам нужно либо изменить хранимую процедуру, чтобы вызвать ошибку, либо проверить набор результатов, возвращаемых хранимой процедурой, прямо в коде (ничего общего с ошибкой).

4 голосов
/ 27 декабря 2010

Вам нужно поднять RAISERROR в сохраненном процессе, чтобы установить ошибку.

Или использовать выходные параметры.Или оператор RETURN

Или добавьте логику, чтобы различать наборы записей "success" и "fail" в клиентском коде.

В настоящее время значение Err не имеет смысла, поскольку нет состояния ошибки

Лично я использую RAISERROR согласно моему вопросу здесь с этим шаблоном

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...