【问题标题】:NullReferenceException: Object reference not set to an instance of an object #2NullReferenceException:对象引用未设置为对象 #2 的实例
【发布时间】:2014-01-20 04:03:00
【问题描述】:

网站上显示的错误。我使用 asp net visual C# webform,访问数据源(MS 访问)当我单击 productdetails.aspx 上的添加到购物车按钮时

Line 41:         int intOrderNo = (int)Session["sOrderNo"];
Line 42:         string strUnitPrice = (string)Session["sUnitPrice"];
Line 43:         decimal decUnitPrice = decimal.Parse(strUnitPrice);

Ms Access 中的 myOrder 表 有oOrderNo、oDate、oUserName、oPaymentMode、oStatus,

 protected void ImageButton1_Click(object sender, ImageClickEventArgs e)
{
    // test to remind customer to login first
    if ((string)Session["sFlag"]!="T")
    {
        Type csType = this.GetType();
        ClientScript.RegisterStartupScript(csType, "Error", scriptErrorLogin);
    }

    // Connect to database  
    OleDbConnection mDB = new OleDbConnection();
    mDB.ConnectionString = "Provider = Microsoft.ACE.OLEDB.12.0;Data source=" + Server.MapPath("~/App_Data/webBase.accdb");
    mDB.Open();
    OleDbCommand cmd;
    DetailsViewRow row0 = DetailsView1.Rows[0];
    string strProductID = row0.Cells[1].Text;
    mDB.Close();

    // save as session variables
    Session["sProductID"] = strProductID;
    DetailsViewRow row4 = DetailsView1.Rows[4];
    Session["sUnitPrice"] = row4.Cells[1].Text;


    int intOrderNo = (int)Session["sOrderNo"];
    string strUnitPrice = (string)Session["sUnitPrice"];
    decimal decUnitPrice = decimal.Parse(strUnitPrice);
    string strSQL = "INSERT INTO orderItems(uOrderNo, uProductID, uUnitPrice)" + "VALUES(@eOrderNo, @eProductID, @eUnitPrice)";
    cmd = new OleDbCommand(strSQL, mDB);
    cmd.Parameters.AddWithValue("@eOrderNo", intOrderNo);
    cmd.Parameters.AddWithValue("@eProductID", strProductID);
    cmd.Parameters.AddWithValue("@eUnitPrice", decUnitPrice);

    mDB.Open();
    cmd.ExecuteNonQuery();
    mDB.Close();

    Response.Redirect("ShoppingCart.aspx");

【问题讨论】:

  • 请检查会话变量值并添加完整的堆栈跟踪
  • 欢迎来到 Stack Overflow!几乎所有NullReferenceException 的情况都是一样的。请参阅“What is a NullReferenceException in .NET?”获取一些提示。
  • 使用 Convert.toString()
  • Line 42: string strUnitPrice = (string)Session["sUnitPrice"]; 可以是Session["sUnitPrice"].ToString()
  • @Kayzel Moo :我看到您正在尝试转换存储在会话中的值。在这种情况下,您收到对象引用错误的唯一原因是会话为空或不存在。

标签: c# asp.net session ms-access nullreferenceexception


【解决方案1】:

试试这个

Line 41:         int intOrderNo = Session["sOrderNo"] == DBNull.Value ? 0 : (int)Session["sOrderNo"];
Line 42:         string strUnitPrice = Session["sUnitPrice"] == DBNull.Value ? string.Empty : (string)Session["sUnitPrice"];

null Vs DBNull.Value

【讨论】:

  • 我应该使用 null 还是 dnull.value?
  • 使用 dbnull.value。参考我的链接。如果对您有帮助,请标记有用
  • 上面的spidercode使用 != 而你使用 == ,区别是?
  • 我认为实际上不需要为价格做 dbnull 吗?
【解决方案2】:

试试下面的代码:

Line 41:         int intOrderNo = Session["sOrderNo"] == null ? 0 : (int)Session["sOrderNo"];
Line 42:         string strUnitPrice = Session["sUnitPrice"] == null ? string.Empty : (string)Session["sUnitPrice"];
Line 43:         decimal decUnitPrice = string.IsNullOrWhiteSpace(strUnitPrice) ? 0 : decimal.Parse(strUnitPrice);

【讨论】:

  • 下面的人用的是dbnull,那我跟着哪个
  • 到目前为止,我认为只是 int intOrderNo = Session["sOrderNo"] == null 吗? 0 : (int)Session["sOrderNo"]; WORKS 没有在下面尝试过 kumar dbnull。谢谢大家的帮助:)
【解决方案3】:

只需检查 Session 变量是否为 Null-

 if( Session["sOrderNo"] != null && all the session variables )
{
     //Now check your condition here
}
else {
       //Perform any operation
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-04-19
    • 2016-06-05
    • 1970-01-01
    • 2014-07-21
    • 2020-11-17
    • 1970-01-01
    • 2023-03-20
    相关资源
    最近更新 更多