簡體   English   中英

如何在asp.net中使用存儲過程的返回值?

[英]How to use the return value of stored procedure in asp.net?

我使用此存儲過程獲取記錄數

ALTER PROCEDURE  [dbo].[Asbabbazi_A]
@count int output
AS
BEGIN
if(@count=0)
set @count =( select count(*)   from dbo.Table_asbabbazi where (active= 0))
end

現在我想在項目中使用@count。我編寫了使用@count方法的代碼。

 SqlConnection con = new SqlConnection(constr);
        cmd.Connection = con;
        con.Open();
        DataAdapter.SelectCommand = cmd;
        DataSet ds = new DataSet("haftehbazardb");
        SqlCommandBuilder bldr = new SqlCommandBuilder(DataAdapter);

        SqlParameter returnParameter = cmd.Parameters.Add("count", SqlDbType.Int);
        returnParameter.Direction = ParameterDirection.ReturnValue;

        cmd.ExecuteNonQuery();

        DataAdapter.Fill(ds, Table_asbabbazi);
        countrecords = (int)returnParameter.Value;

此代碼沒有錯誤,但是當我在項目中使用(countrecords)時(countrecords)的值為零,這是不對的。 請幫忙

如果要獲取該值作為存儲過程的輸出,則需要將其返回。

ALTER PROCEDURE  [dbo].[Asbabbazi_A]
@count int output
AS
BEGIN
if(@count=0)
set @count =( select count(*)   from dbo.Table_asbabbazi where (active= 0))

return @count
end

您正在將輸出參數與返回值混淆。

返回值通常用於指示過程的狀態,如果未指定,則返回0。

CREATE PROCEDURE dbo.TestProc @Out INT OUTPUT
AS
BEGIN
    BEGIN TRY
        SET @Out = 1 / 0;
        RETURN 0;
    END TRY
    BEGIN CATCH
        SET @Out = 0;
        RETURN 1;
    END CATCH
END

然后用T-SQL調用它;

DECLARE @out INT, @return INT;  
EXECUTE @Return = dbo.TestProc @out OUT;
SELECT [Return] = @return, [out] = @out;

會給:

Return | out
-------+-----
   1   |  0

由於0是默認返回值,因此這就是為什么要從returnParameter中獲取0的returnParameter ,您需要使用ParameterDirection.Output

SqlParameter returnParameter = cmd.Parameters.Add("count", SqlDbType.Int);
returnParameter.Direction = ParameterDirection.Output;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM