C# 将存储过程中if条件中的SELECT语句返回到c.net代码

C# 将存储过程中if条件中的SELECT语句返回到c.net代码,c#,sql,asp.net,stored-procedures,C#,Sql,Asp.net,Stored Procedures,我是个新手。我正在尝试开发一个时间表项目,我有一个员工登录页面 经理和开发人员的情况相同,当经理登录时,他/她必须查看员工时间表。我使用存储过程来区分经理和开发人员。。 以下是Sp: ALTER Procedure sp_xyz @UserName nvarchar(100), @Password nvarchar(100) as Begin Declare @Count int Declare @ReturnCode int Select @Count

我是个新手。我正在尝试开发一个时间表项目,我有一个员工登录页面 经理和开发人员的情况相同,当经理登录时,他/她必须查看员工时间表。我使用存储过程来区分经理和开发人员。。 以下是Sp:

ALTER Procedure sp_xyz
    @UserName nvarchar(100),
    @Password nvarchar(100)
as
Begin
    Declare @Count int
    Declare @ReturnCode int

    Select @Count = COUNT(EmployeeName) from tblEmployee
    where [EmployeeName] = @UserName and [Password] = @Password

    if(@Count = 1)
    Begin
        --Select 1 as ReturnCode

        exec @ReturnCode = sp_Abc @UserName, @Password
        return 100
    End
    Else
    Begin
        Select -111 as ReturnCode
    End
End 

ALTER PROCEDURE sp_Abc
    @UserName as nvarchar(200),
    @Password as nvarchar(200)
AS
BEGIN
    Declare @Role as nvarchar(200)

    SELECT @Role = Emp.Role From tblEmployee Emp
    Where Emp.EmployeeName = @UserName and Emp.Password = @Password

    if (@Role = 'Manager')
    Begin
        select
            EmployeeName,
            ProjectName,
            Sunday,
            Monday,
            Tuesday,
            Wednesday,
            Thursday,
            Friday,
            Saturday,
            Week
        from
            tblEmployee
            inner join
                tblProject
            on
                tblProject.ProjectId = tblTimeSheet.ProjectId
            inner join tblTimeSheet
            on
                tblEmployee.EmployeeId = tblTimeSheet.EmployeeId
end
else
    return 10
end
我的代码:

private bool AuthenticateUser(string username, string password)
    {

        string CS = ConfigurationManager.ConnectionStrings["DBCS"].ConnectionString;

        using (SqlConnection con = new SqlConnection(CS))
        {
            SqlCommand cmd = new SqlCommand("spAuthenticateUsersWhileLogin", con);
            cmd.CommandType = CommandType.StoredProcedure;

            // FormsAuthentication is in System.Web.Security
            string EncryptedPassword = FormsAuthentication.HashPasswordForStoringInConfigFile(password, "SHA1");

            cmd.Parameters.AddWithValue("@UserName", username);
            cmd.Parameters.AddWithValue("@Password", EncryptedPassword);
            var returnParam = new SqlParameter
            {
                ParameterName = "@return",
                Direction = ParameterDirection.ReturnValue
            };

            cmd.Parameters.Add(returnParam);
            con.Open();
            cmd.ExecuteNonQuery();

            var ReturnCode = (int)returnParam.Value;
            if (ReturnCode == 100)
            {

                return true; 
            }
            else
            {
                return false;
            }
        }
    }
我犯了一个错误。。当我以开发人员身份登录时,我可以查看我不想查看的其他时间表。。我不知道我什么时候会出错。。。
提前感谢。

您需要将登录逻辑与角色逻辑分开 因为现在至少从你给我们看的 在C代码中检查的唯一一件事是 用户已存在于库中

 var ReturnCode = (int)returnParam.Value;
        if (ReturnCode == 100)
        {

            return true; 
        }
        else
        {
            return false;
        }
因此,在这之后需要做的是调用第二个存储过程

  //.....call of sp_Abc
 if (ReturnCodeAbc == 10) //10 means is not manager
        {

            // do some logic 
        }
        else
        {
           //do the manager stuff
        }

您得到了什么错误..?旁注:您不应该在存储过程中使用sp_uu前缀。微软已经这样做了,而且你确实有可能在将来的某个时候发生名称冲突。最好只是简单地避免使用sp_u,并使用其他东西作为前缀——或者根本不使用前缀!感谢您提供的信息,我肯定会更改我的存储过程名称。另外,只需使用一行即可为您的输出声明新的SqlParameter,例如SqlParameter returnParam=newSqlParameter@return,SqlDbType.Int;如果不是SqlType,请将SqlType更改为正确的类型。Int代码不起作用。当我以经理身份登录时,我应该能够查看员工时间表,如果我以开发人员身份登录,它应该导航到另一个页面