Private Sub Borrow_Click() '單擊“借書”按鈕
Dim Readernumber, ISBN, BookID As String
Dim in_ReaderID, in_ISBN, in_BookID, out_str '儲存過程執行的參數
Dim ReturnValue As Integer '定義返回值變量
Dim Strs As String
Readernumber = ReaderID.Text
ISBN = T_ISBN.Text
BookID = T_BookID.Text
'如果借書證號、ISBN、圖書ID均不為空
If Readernumber <> "" And ISBN <> "" And BookID <> "" Then
SqlCmd.CommandText = "Book_Borrow"
SqlCmd.CommandType = adCmdStoredProc
'追加參數法調用存儲過程
Set in_ReaderID = SqlCmd.CreateParameter("@in_ReaderID", adChar, adParamInput, 8)
SqlCmd.Parameters.Append (in_ReaderID)
Set in_ISBN = SqlCmd.CreateParameter("@in_ISBN", adChar, adParamInput, 18)
SqlCmd.Parameters.Append (in_ISBN)
Set in_BookID = SqlCmd.CreateParameter("@in_BookID", adChar, adParamInput, 10)
SqlCmd.Parameters.Append (in_BookID)
Set out_str = SqlCmd.CreateParameter("@out_str", adChar, adParamInput, 30)
SqlCmd.Parameters.Append (out_str)
'參數賦值
SqlCmd("@in_ReaderID") = ReaderID.Text
SqlCmd("@in_ISBN") = T_ISBN.Text
SqlCmd("@in_BookID") = T_BookID.Text
SqlCmd.Execute (ReturnValue) '執行存儲過程,並將返回值賦給ReturnValue
Strs = SqlCmd.Parameters("@out_str") '將存儲過程輸出參數的值賦給變量Strs
MsgBox (Strs) '給出提示信息
'刪除參數
SqlCmd.Parameters.delete ("@in_ReaderID")
SqlCmd.Parameters.delete ("@in_ISBN")
SqlCmd.Parameters.delete ("@in_BookID")
SqlCmd.Parameters.delete ("@out_str")
'刷新BorrowADO控件
BorrowADO.RecordSource = "SELECT * FROM RBL WHERE 借書證號='" + Trim(Readernumber) + "'"
BorrowADO.Refresh
Else
MsgBox ("請輸入正確的借書信息!")
End If
End Sub
數據庫已經設置好,Book_Borrow存儲過程也設置好了,在SQL中執行未出錯
代碼中 SqlCmd.Execute (ReturnValue) '執行存儲過程,並將返回值賦給ReturnValue 這一行出錯
實時錯誤'-2147217904 (80040e10)'
過程或函數'Book_Borrow'需要參數'@out_str',但未提供該參數
希望有高手可以幫我查查錯,感謝
附上SQL裡的設置
USE MBOOK
GO
CREATE PROCEDURE Book_Borrow @in_ReaderID char(6),@in_ISBN char(18),
@in_BookID char(10),@out_str char(30) OUTPUT
AS
BEGIN
/*判斷是否存在該讀者*/
IF NOT EXISTS(SELECT * FROM TReader WHERE 借書證號=@in_ReaderID)
BEGIN
SET @out_str='該讀者不存在'
RETURN 0
END
/*判斷是否存在該圖書*/
IF NOT EXISTS(SELECT * FROM TBook WHERE ISBN=@in_ISBN)
BEGIN
SET @out_str='該圖書不存在'
RETURN 0
END
/*判斷借書量是否已經到了借書上限數5*/
IF(SELECT 借書量 FROM TReader WHERE 借書證號=@in_ReaderID)=5
BEGIN
SET @out_str='讀者借書量不能大於5'
RETURN 0
END
/*判斷庫存量是否為0*/
IF (SELECT 庫存量 FROM TBook WHERE ISBN=@in_ISBN)=0
BEGIN
SET @out_str='圖書庫存量為0'
RETURN 0
END
/*判斷讀者是否已經借過該書*/
IF @in_ISBN IN (SELECT ISBN FROM TLend WHERE 借書證號=@in_BookID)
BEGIN
SET @out_str='讀者已經借過該書'
RETURN 0
END
/*判斷該書是否已經被借*/
IF EXISTS(SELECT * FROM TLend WHERE 圖書ID=@in_BookID)
BEGIN
SET @out_str='該圖書ID已存在'
RETURN 0
END
BEGIN TRAN /*開始一個事務*/
/*插入借書記錄*/
INSERT INTO TLend(借書證號,ISBN,圖書ID,借書時間)
VALUES(@in_ReaderID,@in_ISBN,@in_BookID,GETDATE())
IF @@ERROR>0 /*如果前面一條SQL語句出錯則回滾事務並返回*/
BEGIN
ROLLBACK TRAN
SET @out_str='執行過程中遇到錯誤'
RETURN 0
END
UPDATE TReader SET 借書量=借書量+1 WHERE 借書證號=@in_ReaderID
IF @@ERROR>0 /*如果前面一條SQL語句出錯則回滾事務並返回*/
BEGIN
ROLLBACK TRAN
SET @out_str='執行過程中遇到錯誤'
RETURN 0
END
UPDATE TBook SET 庫存量=庫存量-1 WHERE ISBN=@in_ISBN
IF @@ERROR>0 /*如果前面一條SQL語句出錯則回滾事務並返回*/
BEGIN
ROLLBACK TRAN
SET @out_str='執行過程中遇到錯誤'
RETURN 0
END
UPDATE TBLend SET 是否借出=1 WHERE 圖書ID=@in_BookID
IF @@ERROR=0 /*如果所有語句都不出錯則結束事務並返回*/
BEGIN
COMMIT TRAN
SET @out_str='借書成功'
RETURN 1
END
ELSE /*如果執行出錯則回滾所有操作並返回*/
BEGIN
ROLLBACK TRAN
SET @out_str='執行過程中遇到錯誤'
RETURN 0
END
END
這是在SQL 2008中執行的Borrow_Book過程
設置為Output
Set out_str = SqlCmd.CreateParameter("@out_str", adChar, adParamOutput, 30)