2016-10-30 70 views
-1

,當點擊一個按鈕,這裏是代碼此按鈕值不能爲空mscorlib.dll中

{

 int i = int.Parse(TextBox1.Text); 

     int p = int.Parse((string)ViewState["PricePerCube"]); //error on this line 
     string img = ViewState["Image"].ToString(); 

     string s2 = System.Web.HttpContext.Current.User.Identity.Name; 
     string s1 = Request.QueryString["TreeInCart"]; 




     SqlConnection a = new SqlConnection(ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString); 

     a.Open(); 
     string cartCmd = "insert into FullCart(TreeInCart,QuantityCubed,User,Image,PricePerCube) values('" + s1 + "','" + i + "','" + s2 + "','" + img + "','" + p + "') "; 
     SqlCommand cmd = new SqlCommand(cartCmd, a); 
     cmd.ExecuteNonQuery(); 
     a.Close(); 
+0

當你通過在調試器中執行代碼,你發現了什麼? – HABO

+0

檢查我編輯的問題,這是調出「值不能爲空」的錯誤代碼,並且在設置ViewState [「PricePerCube」]'時調試它時顯示爲零 – billz

+0

? – Imad

回答

0

這將是粘貼堆棧跟蹤有用我得到這個錯誤。它看起來像int.Parse()拋出 一個ArgumentNullException這意味着

ViewState["PricePerCube"].ToString() //returns null. 

你可以把一個斷點,並調試時檢查以上值。

可我也建議你嘗試使用的TryParse這樣便於您確定發生了什麼:

int price; 
string priceString = ViewState["PricePerCube"].ToString(); 

if (int.TryParse(priceString , out price)) 
{ 
    // code if parse succeeded 
}else{ 
    // code if parse DID NOT succeed 
} 

而且什麼的ViewState [「PricePerCube」返回?這應該是首先要檢查的,如果它是0(int),那麼會拋出字符串強制轉換。

+0

檢查我編輯的問題,這是調出「值不能爲空」的錯誤代碼,並在調試它顯示一個零 – billz

+0

我強烈懷疑(字符串)ViewState [「PricePerCube」]爲空。你應該爲它添加一個檢查... – brakeroo

+0

我按你的建議做了,解析不成功..所以我現在做什麼? – billz

0

你需要做適當的空檢查。特別是當你使用或取決於你沒有創建的結構和值時。

因此,當你控制TextBox1中從aspx頁面刪除了此行int i = int.Parse(TextBox1.Text);將拋出的NullReferenceException

我不知道該期待什麼,你正在創建,但你可以做的是這樣的:

var viewstateValue = ViewState["Sumthing"] ?? "0"; 
int p = int.Parse(viewstateValue); 

這至少可以確保你會得到一個,然後你可以用於您的T-SQL語句。

而對於在上帝的份使用SQL參數,如果你不希望vunerable到SQL Injection Attacks