如何在asp.net中使用存储过程的return值?
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
现在我想在我的 project.I 中使用 @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) 的值为零,这是不正确的。
请帮助
如果要获取值作为存储过程的输出,则需要return它。
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
您将输出参数与 return 值混淆了。
Return值一般用来表示你程序的状态,不指定则为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 是默认的 return 值,这就是为什么你从 returnParameter
中得到 0 的原因,你需要使用 ParameterDirection.Output
:
SqlParameter returnParameter = cmd.Parameters.Add("count", SqlDbType.Int);
returnParameter.Direction = ParameterDirection.Output;
我使用这个存储过程来获取记录数
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
现在我想在我的 project.I 中使用 @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) 的值为零,这是不正确的。 请帮助
如果要获取值作为存储过程的输出,则需要return它。
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
您将输出参数与 return 值混淆了。
Return值一般用来表示你程序的状态,不指定则为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 是默认的 return 值,这就是为什么你从 returnParameter
中得到 0 的原因,你需要使用 ParameterDirection.Output
:
SqlParameter returnParameter = cmd.Parameters.Add("count", SqlDbType.Int);
returnParameter.Direction = ParameterDirection.Output;