C# 将存储过程中if条件中的SELECT语句返回到c.net代码
我是个新手。我正在尝试开发一个时间表项目,我有一个员工登录页面 经理和开发人员的情况相同,当经理登录时,他/她必须查看员工时间表。我使用存储过程来区分经理和开发人员。。 以下是Sp: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
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代码不起作用。当我以经理身份登录时,我应该能够查看员工时间表,如果我以开发人员身份登录,它应该导航到另一个页面