调用数据库存储过程
private void InitializeComponent()
{    this.cmdInsertGiftbook.CommandText = "dbo.[spInsertGiftbook]";
this.cmdInsertGiftbook.CommandType = System.Data.CommandType.StoredProcedure;
this.cmdInsertGiftbook.Connection = this.cnAddGiftbook;
this.cmdInsertGiftbook.Parameters.Add(new System.Data.SqlClient.SqlParameter("@RETURN_VALUE", System.Data.SqlDbType.Int, 4, System.Data.ParameterDirection.ReturnValue, false, ((System.Byte)(0)), ((System.Byte)(0)), "", System.Data.DataRowVersion.Current, null));
this.cmdInsertGiftbook.Parameters.Add(new System.Data.SqlClient.SqlParameter("@CustomerID", System.Data.SqlDbType.Int, 4));
this.cmdInsertGiftbook.Parameters.Add(new System.Data.SqlClient.SqlParameter("@ISBNList", System.Data.SqlDbType.NVarChar, 4000));
this.cmdInsertGiftbook.Parameters.Add(new System.Data.SqlClient.SqlParameter("@UserName", System.Data.SqlDbType.NVarChar, 16));
this.cmdInsertGiftbook.Parameters.Add(new System.Data.SqlClient.SqlParameter("@GiftbookTypeID", System.Data.SqlDbType.Int, 4));
this.cmdInsertGiftbook.Parameters.Add(new System.Data.SqlClient.SqlParameter("@Number", System.Data.SqlDbType.Int, 4));
this.cmdInsertGiftbook.Parameters.Add(new System.Data.SqlClient.SqlParameter("@ReleaseDatetime", System.Data.SqlDbType.DateTime, 8));
this.cmdInsertGiftbook.Parameters.Add(new System.Data.SqlClient.SqlParameter("@Feedback", System.Data.SqlDbType.NVarChar, 1073741823));
this.cmdInsertGiftbook.Parameters.Add(new System.Data.SqlClient.SqlParameter("@Memo", System.Data.SqlDbType.NVarChar, 1073741823));
this.Load += new System.EventHandler(this.Page_Load); }cmdInsertGiftbook.ExecuteNonQuery(); int returnvalue = int.Parse(cmdInsertGiftbook.Parameters["@RETURN_VALUE"].Value.ToString()); if(returnvalue == 0)
{
lbResult.Text = "图书书号不正确。请检查是否存在相应的图书。";
}------这是可以执行出来的
else if(returnvalue == -3)
{
lbResult.Text = "该图书已经报废了。";
}---我想添加的怎么也不能返回参数存储过程如下:是在不知这个0是如何传递过去的
CREATE PROCEDURE dbo.spInsertGiftbook
(
@CustomerID int,
@ISBNList nvarchar(4000),
@UserName nvarchar(16),
@GiftbookTypeID int,
@Number int,
@ReleaseDatetime datetime,
@Feedback ntext,
@Memo ntext
)
AS
SET NOCOUNT OFF;--DECLARE @BookID int
--DECLARE @IsOutOfPrint int
DECLARE @ProvinceID intSELECT @ProvinceID = dbo.GetProvinceID(N'CustomerID', @CustomerID)-- 检查该用户针对该省份是不是有写权限
IF (dbo.CheckUserProvinceWriteInfo(@UserName, @ProvinceID) = 0)
RETURN -1SET @ISBNList = LTRIM(RTRIM(@ISBNList))SELECT LTRIM(RTRIM(SplitString)) AS ISBN INTO #TempBookISBNList FROM dbo.GetSplitString(@ISBNList, ',')/*
SELECT @BookID = BookID FROM Books WHERE (ISBN = @ISBN)  --从Books中检索是不是有相应的书号IF (@BookID IS NULL) --如果没有相应的ID,表明该图书不存在
BEGIN
RETURN 0
END
*//*
SELECT @IsOutOfPrint = IsOutOfPrint FROM Books WHERE (ISBN = @ISBN)  --从Books中检索是不是有相应的书号IF (@IsOutOfPrint=1) --如果没有相应的ID,表明该图书不存在
BEGIN
RETURN -3
END
*/--IF (SELECT COUNT(*) FROM Giftbooks WHERE CustomerID = @CustomerID AND BookID = @BookID) > 0
--BEGIN
-- SELECT @ReturnValue = 0
-- RETURN -2
--END
--ELSE
BEGIN
INSERT INTO Giftbooks (
CustomerID,
BookID,
UserName,
GiftbookTypeID,
Number,
ReleaseDatetime,
Feedback,
Memo
)
SELECT @CustomerID,
Books.BookID,
@UserName,
@GiftbookTypeID,
@Number,
@ReleaseDatetime,
@Feedback,
@Memo
FROM #TempBookISBNList INNER JOIN
Books ON #TempBookISBNList.ISBN = Books.ISBN RETURN @@IDENTITY
END
GO

解决方案 »

  1.   

    returnvalue ---这个是怎么传递过来的,真是着急!
      

  2.   

    我就是想添加一个returnvalue == -3的参数
    却怎么也传递不回来!else if(returnvalue == -3)
    {
    lbResult.Text = "该图书已经报废了。";
    }---我想的怎么也不能返回参数
      

  3.   

    returnvalue是默认自带的参数,就是存储过程里RETURN的东东。
      

  4.   

    cmdInsertGiftbook.ExecuteNonQuery();
    //这里把连接关闭,后面就能得到返回值了
    int returnvalue = int.Parse(cmdInsertGiftbook.Parameters["@RETURN_VALUE"].Value.ToString());
      

  5.   

    @RETURN_VALUE是存储过程的默认参数,在调用时不需要手工添加这个参数,@RETURN_VALUE的值为存储过程中Return语句的值,不过,尽量不要通过@RETURN_VALUE返回负数,可能会与sql server的错误代码冲突。
      

  6.   

    我知道返回的值从这里:int.Parse(cmdInsertGiftbook.Parameters["@RETURN_VALUE"].Value.ToString得来。但是不知道存储过程那里错了。想回复一个-3,怎么也不行
      

  7.   

    如果是这种情况,我建议你在create procedure的时候加入一个@result。
    例如:CREATE PROCEDURE dbo.spInsertGiftbook
    (
    @CustomerID int,
    @ISBNList nvarchar(4000),
    @UserName nvarchar(16),
    @GiftbookTypeID int,
    @Number int,
    @ReleaseDatetime datetime,
    @Feedback ntext,
    @Memo ntext,
    @result int output --加在这里
    )
    然后在调用存储过程中改变@result的值,最后再使用int result = int.Parse(cmdInsertGiftbook.Parameters["@result"].Value.ToString)这样就应该可以了