此代码提供InvalidCastException:指定的强制转换无效。
// getting the user id
SqlCommand cmd2 = new SqlCommand("getId", conn);
cmd2.CommandType = CommandType.StoredProcedure;
cmd2.Parameters.Add(new SqlParameter("@email", email));
// output parm
SqlParameter user_id = cmd2.Parameters.Add("@user_id", SqlDbType.Int);
count.Direction = ParameterDirection.Output;
conn.Open();
cmd.ExecuteNonQuery();
conn.Close();
Session["user_id"] = user_id;
Response.Redirect("~/CheckProfile.aspx");
然后在另一个页面中使用此user_id时,我写了这个:
int user_id = (int)(Session["user_id"]);
答案 0 :(得分:4)
您将SqlParameter
存储在Session [“user_id”]中,然后尝试将其转换为int
。那个演员阵容无法完成。
取而代之的是:
Session["user_id"] = (int)user_id.Value;
然后您将存储int
,并能够检索它。你可能想要转换为int?
,因为那时你可以处理它没有被设置:
int? userIDMaybe = (int?)Session["user_id"];
if(userIDMaybe.HasValue)
{
int userID = userIDMaybe.Value;
/* ... */
}
else
{
/* Code to handle not logged in yet... */
}
答案 1 :(得分:1)
这应该这样做
SqlCommand cmd2 = new SqlCommand("getId", conn);
cmd2.CommandType = CommandType.StoredProcedure;
cmd2.Parameters.Add(new SqlParameter("@email", email));
// output parm
SqlParameter user_id = new SqlParameter("@user_id", SqlDbType.Int);
user_id.Direction = ParameterDirection.Output;
cmd2.Parameters.Add(user_id);
conn.Open();
cmd2.ExecuteNonQuery();
conn.Close();
Session["user_id"] = cmd2.Parameters["@user_id"].Value;
Response.Redirect("~/CheckProfile.aspx");