asp.net调用存储过程返回值问题

存储过程:
------------------------------------
--用途:检查用户是否已经存在
------------------------------------
CREATE PROCEDURE UserInfo_Exists
@userName varchar(50)
AS
DECLARE @TempID int
SELECT @TempID = count(1) FROM [UserInfo] WHERE userName=userName
IF @TempID = 0
RETURN 0
ELSE
RETURN 1
GO
--如果用户存在,则返回1,反之返回0

--------------------------------------------------------------
asp.net调用代码:

SqlParameter[] parameters = {
new SqlParameter("@userName", SqlDbType.VarChar,50),
new SqlParameter("@ReturnValue", SqlDbType.Int,4) };
parameters[0].Value = '用户账号';
parameters[1].Direction = ParameterDirection.ReturnValue;
return DbHelperSQL.ExistsProcedure("UserInfo_Exists", parameters);

需要实现功能:如果用户存在,则返回1,反之返回0
出现的问题:
1:返回null, 我是新手,怎么都检查不出来问题,希望知道的能指点下,先谢了
DbHelperSQL代码:
public static bool ExistsProcedure(string procName, SqlParameter[] cmdParms)
{
using (SqlConnection connection = new SqlConnection(connectionString))
{
using (SqlCommand cmd = new SqlCommand())
{
try
{
PrepareCommand(cmd, connection, null, procName, CommandType.StoredProcedure, cmdParms);
int result = Convert.ToInt16(cmd.ExecuteScalar());
cmd.Parameters.Clear();.
return result==0?false:true;
}
catch (SqlException ex)
{
throw ex;
}
}
}

第1个回答  2012-09-28
你的用法不对,存储过程的返回值不是用来返回数据的,存储过程只能返回int,而且这个int的目的是用来表示存储过程执行状态的,比如执行成功,执行错误等等。你这种情况要用output parameter,比较符合标准。

但其实这不是重点,重点是ExecuteScalar是返回结果集第一行第一列的值,不是return value,你搞错了。本回答被网友采纳
第2个回答  2012-09-28
存储过程不能那样返回值

CREATE PROCEDURE UserInfo_Exists
@res varchar(50) output
AS
DECLARE @TempID int
SELECT @TempID = count(1) FROM [UserInfo] WHERE userName=userName
IF @TempID = 0
@res = 0
ELSE
@res = 1
GO
用 output定义返回的数据,然后接收
第3个回答  2012-09-28
存储过程要用输出参数的
CREATE PROCEDURE UserInfo_Exists
@userName varchar(50) out put
AS
DECLARE @TempID int
SELECT @TempID = count(1) FROM [UserInfo] WHERE userName=userName
IF @TempID = 0
@userName = 0
ELSE
@userName = 1
GO
第4个回答  2012-09-28
不要用return,用select
IF @TempID = 0
select 0
ELSE
select 1本回答被提问者采纳
第5个回答  2012-09-28
我也想知道
相似回答
大家正在搜