值不能为null mscorlib.dll

时间:2016-10-30 02:37:38

标签: c# asp.net

单击按钮时出现此错误,此处是此按钮的代码

{

        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();

2 个答案:

答案 0 :(得分: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)则会抛出字符串。

答案 1 :(得分:0)

您需要进行适当的空检查。特别是当你正在使用或依赖于你尚未创造的结构和价值观时。

当从aspx页面中删除控件 TextBox1 时,此行int i = int.Parse(TextBox1.Text);将抛出 NullReferenceException

我不知道你所创造的东西的期望,但你可以做的是:

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

这至少可以确保您获得 Zero ,然后您可以将其用于T-SQL语句。

为了天堂,如果你不想对SQL Injection Attacks

感到骄傲,请使用SQL参数