我程序用的是VB6.0,数据库是SQL2000,
插入一个存储过程
Create PROCEDURE PROC_RdrecordsNoBeff
AS
begin
BEGIN TRANSACTION
delete from systasklog
delete from Mat_sup where PartID=959
if @@error<>0
BEGIN
--提示错误 并退出
ROLLBACK TRANSACTION
RAISERROR('资产类物料,单件号不允许为空!',11,1)
return 1
END
COMMIT TRANSACTION
end
GO
比如这样一个存储过程,delete from systasklog这句执行不会出错,
这句delete from Mat_sup where PartID=959执行会出错
在查询分析器我当然可以看到错误信息,
问题来了,我在VB里面如何抓取具体错误信息呢,
我在VB中是这样调用的:
Public Function ExecPROC() As Boolean
On Error GoTo Errcon
Dim Rd As New ADODB.Command
Rd.ActiveConnection = Cn
Rd.CommandText = "PROC_RdrecordsNoBeff"
Rd.CommandType = adCmdStoredProc
Rd.Execute
If Rd.Parameters(0) = 1 Then
ExecPROC = False
Exit Function
End If
ExecPROC = True
Exit Function
Errcon:
MsgBox Err.Description
End Function
请问该如何改动,才能抓取具体错误信息?
你不要在程序中抓取错误信息
你可以这样
if @@error<>0
BEGIN
--提示错误 并退出
ROLLBACK TRANSACTION
select 'F' as rel, '资产类物料,单件号不允许为空!' as msg
return 1
END
这样你你的返回值就是一个表 而表中就包含你的错误信息 就不用再程序中捕捉存储过程里面raiseerror的信息了
vb里面也有错误捕获语法的。查查看
在存储过程里加begin try 执行语句 end try begin catch SELECT * FROM (SELECT ERROR_LINE() AS [LINE],ERROR_MESSAGE() as [MESSAGE],ERROR_NUMBER() as [NUMBER],ERROR_PROCEDURE() as [PROCEDURE],ERROR_STATE() as [STATE],ERROR_SEVERITY()as [severity] )as error for xml auto end catch