2014-01-06 40 views
0

此代码给出InvalidCastException:指定的转换无效。指定的转换无效投射SqlParameter

// 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"]); 
+4

'SqlParameter' ='int' –

+0

使用'AddWithValue()'代替:http://msdn.microsoft .com/en-us/library/system.data.sqlclient.sqlparametercollection.addwithvalue%28v = vs.110%29.aspx –

回答

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"); 
4

你在会话存储SqlParameter [ “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... */ 
} 
+0

我试过这个,但它说:对象引用未设置为对象的实例,指向此代码行:Session [“user_id”] =(int)(user_id.Value);有什么建议吗? – user3166918