我目前正在购买购物车上的项目。我已经完成了购物车,但不知怎的,我无法计算购物车和它保持显示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 + ")";
}
希望你们都能帮助我找到问题所在。 谢谢你提前。
答案 0 :(得分:1)
更改此行:
nofRow = msqlReader["COUNT(*)"].ToString();
要
nofRow = msqlReader[0].ToString();
也许,它会帮助你。
答案 1 :(得分:1)
好,也许MySqlDataReader
可能会在阅读"COUNT(*)"
列时遇到问题(我还没有尝试过)。
另一方面,当您使用"COUNT(*)"
阅读msqlReader["COUNT(*)"]
列时,您的结果可能是null
而Convert.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来处理您的MySqlConnection
和MySqlCommand
之类的内容;
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
。