PDA

View Full Version : Raiserror



Don
02-01-2003, 08:58
Chào các ban!
Các bạn cho mình hỏI về cách dung hàm RAISERROR trong SQL.
Trong SQL mình có tạo ra một procedure:
Create procedure Test1
AS
Select * from Table
Raiserror (‘Error’,16,1)

Trong VB minh co goi procedure Test1 nhưng minh lai không bắt được thông báo error!

Nhưng nếu mình tạo procedure
Create Procedure Test2
As
Raiserror (‘Error’,16,1)
Select * from table

Thi VB lạI bắt được thong báo error khi goi hàm Test2.

Thanks!!
:eek: :eek: :confused: :confused: :evil: :evil: :evil: :evil: :evil:

phuncud
23-01-2003, 17:21
Không biết bạn bắt lỗi bằng cách nào, nếu dùng hàm bắt lỗi gần nhất của VB thì có thể giải thích như sau:

proc test1
Câu lệnh select trả về Vb 01 cursor
câu lệnh thứ hai: raiserror sẽ xảy ra như sau:
+ trả về VB với 01 thông báo lỗi 'Error'
+ Can thiệp không cho Vb nhận cursor do câu lệnh select trả về (cái này tui không chắc lắm chỉ phỏng đoán vậy thôi)

Như vậy tác dụng thứ hai của câu lệnh raiserror sẽ lại gây ra 01 lỗi tiếp theo cho VB (lỗi này xảy ra sau thông báo 'Error' do VB phát ra khi không nhận được cursor trả về)

Do vậy cho nên nếu dùng hàm bắt lỗi thì sẽ nhận được lỗi thứ hai.

proc test2:
Do câu lệnh raiserror thực thi trước câu lệnh select nên không gây ra lỗi "ngoài mong muốn như proc test1.


Bạn thủ sửa đổi câu lệnh select trong proc test1 thành câu lệnh update thì VB sẽ nhận được thông báo lỗi mong muốn (do câu lệnh update không trả về dữ liệu)

Chúc thành công

PS: Mà thường thì không ai viết procedure mà cấu trúc như proc test1 của bạn: lấy dữ liệu kèm theo thông báo lỗi. Cách thường dùng là khi xảy ra lổi thì quay trở lại, dùng câu lệnh roll back transaction

Chào bạn