如何使用会话用户计算购物车

时间:2014-07-23 14:22:59

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

我目前正在购买购物车上的项目。我已经完成了购物车,但不知怎的,我无法计算购物车和它保持显示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 + ")";
        }

希望你们都能帮助我找到问题所在。 谢谢你提前。

3 个答案:

答案 0 :(得分:1)

更改此行:

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

nofRow = msqlReader[0].ToString();

也许,它会帮助你。

答案 1 :(得分:1)

,也许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来处理您的MySqlConnectionMySqlCommand之类的内容;

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

答案 2 :(得分:1)

少数事情:

  • 确认string a = Session["customer_Username"].ToString();确实返回了用户名。
  • nofRow = msqlReader["COUNT(*)"].ToString();更改为nofRow = msqlReader[0].ToString();。您的查询中包含计数聚合函数。
  • 验证SELECT COUNT(*) FROM shoppingcart WHERE Item_Id = @Username是否确实吸引了价值。 @Username需要替换为会话中的值。
  • 您觉得此行msqlCommand.Parameters.AddWithValue("@Username", _Username);中有拼写错误。 _Username应为Username