我正在尝试从存储过程中获取返回值,但它始终返回0。
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;
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。我不知道问题所在。
我尝试了类似您的代码,并且可以按预期工作。 但是,您的代码中两次调用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;