2014-01-06 80 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