【发布时间】:2020-01-17 03:21:22
【问题描述】:
在下面的代码中,我试图检索经理的 ID,然后必须将其作为第二个参数传递给 SQL 存储过程,如下面的代码所示:
目前代码只使用一个参数(EmpID)。
void EmpProfileLists(string EmpId,string EmpName)
{
if (EmpId == "0")
{
Label2.Text = "There is no Emp associated with your account";
Label2.Visible = true;
}
else Label2.Visible = false;
try
{
Session["EmpId"] = EmpId;
Label1.Text = EmpId;
if (Session["MgrName"] != null) Session.Remove("MgrName");
var claimsIdentity = Context.Emp.Identity as ClaimsIdentity;
foreach (var claim in claimsIdentity.Claims)
{
{
Session.Add("MgrName", "micro\\"+Session["MgrName"].Substring(Session["MgrName"].LastIndexOf("/")));
}
}
string MgrName = Session["MgrName"].ToString();
LoadProfiles(EmpId);
}
catch (Exception)
{
}
}
private void LoadProfiles(string EmpId)
{
try
{
SqlDataAdapter da = new SqlDataAdapter("Exec EmpReports " + EmpId);
DataTable dt = new DataTable();
da.Fill(dt);
RadGrid1.DataBind();
}
catch (Exception)
{
}
}
代码在传递时仅适用于员工 ID,但我也在尝试添加经理 ID。
有人可以帮忙吗?
【问题讨论】:
-
Exec EmpReports " + EmpId,请阅读 SQL 注入。 -
而不是仅仅使用字符串来调用带有参数的过程,您应该使用
SqlCommand的Parameters集合,就像Dale 发现的问题一样。这可能会让人觉得冗长,但它避免了各种数据类型转换错误,并保护您免受 SQL 注入攻击。 -
请分享存储过程的前5行。
标签: c# sql-server stored-procedures parameter-passing sqlcommand