指定的强制转换无法转换SqlParameter

时间:2014-01-06 21:22:55

标签: c# sql-server ado.net

此代码提供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"]);

2 个答案:

答案 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");