单击按钮时出现此错误,此处是此按钮的代码
{
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 :(得分: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参数