【问题标题】:How to count cart using session user如何使用会话用户计算购物车
【发布时间】:2014-09-14 19:00:23
【问题描述】:

我目前正在做一个关于购物车的项目。我已经完成了购物车,但不知何故我无法计算购物车并且它一直显示为 0。 我已经检查了用户的会话是否已被抓取。

这是我使用的方法:

    //check cart count
    public int getCartCount(string Username)
    {

        MySql.Data.MySqlClient.MySqlConnection msqlConnection = null;
        msqlConnection = new MySql.Data.MySqlClient.MySqlConnection("server=localhost;User Id=root;password=rootPassw0rd;Persist Security Info=False;database=infosec;Integrated Security=False");
        MySql.Data.MySqlClient.MySqlCommand msqlCommand = new MySql.Data.MySqlClient.MySqlCommand();
        //define the connection used by the command object
        msqlCommand.Connection = msqlConnection;

        msqlCommand.CommandText = "SELECT COUNT(*) FROM shoppingcart WHERE Item_Id = @Username ";
        msqlCommand.Parameters.AddWithValue("@Username", _Username);

        msqlConnection.Open();

        string nofRow = "";

        MySql.Data.MySqlClient.MySqlDataReader msqlReader = msqlCommand.ExecuteReader();

        if (msqlReader.Read())
        {
            nofRow = msqlReader["COUNT(*)"].ToString();
        }

        msqlConnection.Close();
        msqlConnection.Close();
        msqlReader.Dispose();

        int cart = Convert.ToInt32(nofRow);


        return cart;

这是 .axps 页面的代码:

 //cart increase if there items added.
        if (Session["customer_Username"] == null)
        {
            cartCount.InnerText = "Cart (0)";
        }
        else
        {
            cartBLL cBLL = new cartBLL();
            string a = Session["customer_Username"].ToString();
            int count = cBLL.getCartCount(a);
            cartCount.InnerText = "Cart (" + count + ")";
        }

希望大家能帮我找出问题。 提前致谢。

【问题讨论】:

    标签: c# mysql asp.net shopping-cart


    【解决方案1】:

    改变这一行:

    nofRow = msqlReader["COUNT(*)"].ToString();
    

    nofRow = msqlReader[0].ToString();
    

    也许对你有帮助。

    【讨论】:

      【解决方案2】:

      好吧,也许MySqlDataReader 在阅读"COUNT(*)" 列时会遇到问题(我还没有尝试过)。

      另外一点,当你读取"COUNT(*)" 列和msqlReader["COUNT(*)"] 时,你的结果可以是nullConvert.ToInt32(null) 生成0。 (但这不太可能

      但更重要的是,在您的情况下使用 MySqlDataReader 并不是一个好的选择。由于您使用COUNT(*) 来获取行数,因此ExecuteScalar 是一个更好的选择,它返回查询中第一行的第一列。

      msqlCommand.CommandText = "SELECT COUNT(*) FROM shoppingcart WHERE Item_Id = @Username ";
      msqlCommand.Parameters.AddWithValue("@Username", _Username);
      int cart = (int)msqlCommand.ExecuteScalar();
      

      也可以使用using statement来处理你的MySqlConnectionMySqlCommandlike;

      using(MySqlConnection msqlConnection = new MySqlConnection(conString))
      using(MySqlCommand msqlCommand = myCon.CreateCommand())
      {
           //
      }
      

      【讨论】:

      • 对不起,我是c#的初学者,可以给我一个例子。
      • @Samuel 你什么意思?
      【解决方案3】:

      几件事:

      • 验证string a = Session["customer_Username"].ToString(); 确实返回了用户名。
      • nofRow = msqlReader["COUNT(*)"].ToString(); 更改为nofRow = msqlReader[0].ToString();。您的查询中有 count 聚合函数。
      • 验证SELECT COUNT(*) FROM shoppingcart WHERE Item_Id = @Username 确实提取了价值。 @Username 需要替换为会话中的值。
      • 您在这行 msqlCommand.Parameters.AddWithValue("@Username", _Username); 中似乎有错字。 _Username 应该是 Username

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-01-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-06-16
        • 1970-01-01
        • 2011-11-14
        • 1970-01-01
        相关资源
        最近更新 更多