小编典典

存储过程始终返回0

sql

我正在尝试从存储过程中获取返回值,但它始终返回0。

C#代码

cmd = new SqlCommand();
    cmd.CommandType = CommandType.StoredProcedure;
    cmd.CommandText = "AbsentEntry";
    cmd.Parameters.Add("@EmpID", SqlDbType.VarChar).Value = ViewState["empID"].ToString();
    cmd.Parameters.Add("@AttendanceDate", SqlDbType.Date).Value = date.ToString("yyyy-MM-dd");
    cmd.Connection = conn;
    conn.Open();
    cmd.ExecuteNonQuery();
    SqlParameter returnParameter = cmd.Parameters.Add("@returnval", SqlDbType.Int);
    returnParameter.Direction = ParameterDirection.ReturnValue;
    cmd.ExecuteNonQuery();

    int result = (int)cmd.Parameters["@returnval"].Value;
    return result;

SP

    ALTER PROCEDURE [dbo].[AbsentEntry] 
@EmpID varchar(10), 
@AttendanceDate Date

AS BEGIN
declare @returnval     int 
IF (SELECT COUNT(*) FROM tblEmpAttendance WHERE EmpID = @EmpID AND AttendanceDate=@AttendanceDate) = 0
    BEGIN
        insert into tblEmpAttendance (EmpID, AttendanceDate, IsInOut, SessionCount, IsPresent) values ( @EmpID,@AttendanceDate,'OUT',0,'A')
        set @returnval=1
    return @returnval
     END
ELSE
    BEGIN
       set @returnval=0 
    return @returnval
    END
END

在所有情况下,它都返回0。我不知道问题所在。


阅读 271

收藏
2021-04-14

共1个答案

小编典典

我尝试了类似您的代码,并且可以按预期工作。
但是,您的代码中两次调用ExecuteNonQuery。

首次调用时,将按预期插入记录,然后为返回值添加参数并再次执行命令。但是现在记录已存在,并且存储过程始终落在else块中,因此始终返回零。

cmd = new SqlCommand();
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = "AbsentEntry";
cmd.Parameters.Add("@EmpID", SqlDbType.VarChar).Value = ViewState["empID"].ToString();
cmd.Parameters.Add("@AttendanceDate", SqlDbType.Date).Value = date.ToString("yyyy-MM-dd");
SqlParameter returnParameter = cmd.Parameters.Add("@returnval", SqlDbType.Int);
returnParameter.Direction = ParameterDirection.ReturnValue;
cmd.Connection = conn;
conn.Open();
cmd.ExecuteNonQuery();
int result = (int)cmd.Parameters["@returnval"].Value;
return result;
2021-04-14