C# 如何从数据列表更新数据库表?
我正在建立一个电子商务网站,我使用一个数据列表来显示我的产品,当我按下“添加到购物车”按钮时,它们应该被添加到一个数据库表中,但由于某种原因,产品没有在数据库表中更新。此外,单击第1个产品会出现一个错误,显示“已经有一个打开的读卡器”,显示错误的行是“int result=comm.ExecuteNonQuery();”C# 如何从数据列表更新数据库表?,c#,asp.net,database,datalist,C#,Asp.net,Database,Datalist,我正在建立一个电子商务网站,我使用一个数据列表来显示我的产品,当我按下“添加到购物车”按钮时,它们应该被添加到一个数据库表中,但由于某种原因,产品没有在数据库表中更新。此外,单击第1个产品会出现一个错误,显示“已经有一个打开的读卡器”,显示错误的行是“int result=comm.ExecuteNonQuery();” 尝试按如下方式更新代码: if (e.CommandName == "AddToCart") { bool productExists = false;
尝试按如下方式更新代码:
if (e.CommandName == "AddToCart") {
bool productExists = false;
Session["uid"] = 1;
Label lbl = (Label) e.Item.FindControl("PIDLabel");
lblAtC.Text = lbl.Text;
ShowMessage("Product successfully added to Cart", MessageType.Success);
string connStr = ConfigurationManager.ConnectionStrings["MWM1812ConnString"].ConnectionString;
SqlConnection conn = new SqlConnection(connStr);
conn.Open();
string sqlQuery = "SELECT * FROM tblShoppingCart WHERE uid=@uid AND pid=@pid";
SqlCommand comm = new SqlCommand(sqlQuery, conn);
comm.Parameters.AddWithValue("@uid", Session["uid"]);
comm.Parameters.AddWithValue("@pid", lblAtC.Text.Trim());
using(SqlDataReader reader = comm.ExecuteReader()) {
productExists = reader.HasRows;
}
if (productExists) {
string sqlQuery2 = "UPDATE tblShoppingCart SET qty=qty+1 WHERE uid=@uid AND pid=@pid";
// Add code for adding parameters and executing sqlQuery2
} else {
string sqlQuery1 = "INSERT INTO tblShoppingCart (uid, pid, qty, dtShopped) VALUES (@uid, @pid, @qty, @dtShopped)";
SqlCommand comma = new SqlCommand(sqlQuery, conn);
comma.Parameters.AddWithValue("@uid", Session["uid"]);
comma.Parameters.AddWithValue("@pid", lblAtC.Text);
comma.Parameters.AddWithValue("@qty", 1);
//comm.Parameters.AddWithValue("@dtShopped", DateTime.Now.ToLongDateString());
comma.Parameters.AddWithValue("@dtShopped", DateTime.Now.ToString());
int result = comma.ExecuteNonQuery();
}
}
请注意,使用reader.HasRows属性来确定产品是否已经存在。另外,SqlDataReader被包装在
中,使用块将其处理掉。尝试如下更新代码:
if (e.CommandName == "AddToCart") {
bool productExists = false;
Session["uid"] = 1;
Label lbl = (Label) e.Item.FindControl("PIDLabel");
lblAtC.Text = lbl.Text;
ShowMessage("Product successfully added to Cart", MessageType.Success);
string connStr = ConfigurationManager.ConnectionStrings["MWM1812ConnString"].ConnectionString;
SqlConnection conn = new SqlConnection(connStr);
conn.Open();
string sqlQuery = "SELECT * FROM tblShoppingCart WHERE uid=@uid AND pid=@pid";
SqlCommand comm = new SqlCommand(sqlQuery, conn);
comm.Parameters.AddWithValue("@uid", Session["uid"]);
comm.Parameters.AddWithValue("@pid", lblAtC.Text.Trim());
using(SqlDataReader reader = comm.ExecuteReader()) {
productExists = reader.HasRows;
}
if (productExists) {
string sqlQuery2 = "UPDATE tblShoppingCart SET qty=qty+1 WHERE uid=@uid AND pid=@pid";
// Add code for adding parameters and executing sqlQuery2
} else {
string sqlQuery1 = "INSERT INTO tblShoppingCart (uid, pid, qty, dtShopped) VALUES (@uid, @pid, @qty, @dtShopped)";
SqlCommand comma = new SqlCommand(sqlQuery, conn);
comma.Parameters.AddWithValue("@uid", Session["uid"]);
comma.Parameters.AddWithValue("@pid", lblAtC.Text);
comma.Parameters.AddWithValue("@qty", 1);
//comm.Parameters.AddWithValue("@dtShopped", DateTime.Now.ToLongDateString());
comma.Parameters.AddWithValue("@dtShopped", DateTime.Now.ToString());
int result = comma.ExecuteNonQuery();
}
}
请注意,使用reader.HasRows属性来确定产品是否已经存在。另外,SqlDataReader被包装在中,使用块来处理它。我尝试过它,但它给出了相同的“已经有一个打开的DataReader与此命令关联,必须先关闭它。”错误您是否将完整的代码作为问题的一部分发布了?另外,您在哪一行代码处获得此异常?是的,这是整个页面的代码。问题在于int result=comm.ExecuteNonQuery();我认为您的insert命令名是comma
(请注意末尾的“a”),而不是引起问题的comm
。我也更新了答案<代码>逗号.Parameters.AddWithValue(“@uid”,会话[“uid]”);逗号.Parameters.AddWithValue(“@pid”,lblAtC.Text);逗号.Parameters.AddWithValue(“@qty”,1);comma.Parameters.AddWithValue(“@dtShopped”,DateTime.Now.ToString());int result=comma.ExecuteNonQuery()代码>我试过了,但是它给出了相同的错误。我试过了,但是它给出了相同的错误:“已经有一个打开的DataReader与此命令关联,必须先关闭。”错误您是否发布了完整的代码作为问题的一部分?另外,您在哪一行代码处获得此异常?是的,这是整个页面的代码。问题在于int result=comm.ExecuteNonQuery();我认为您的insert命令名是comma
(请注意末尾的“a”),而不是引起问题的comm
。我也更新了答案<代码>逗号.Parameters.AddWithValue(“@uid”,会话[“uid]”);逗号.Parameters.AddWithValue(“@pid”,lblAtC.Text);逗号.Parameters.AddWithValue(“@qty”,1);comma.Parameters.AddWithValue(“@dtShopped”,DateTime.Now.ToString());int result=comma.ExecuteNonQuery()代码>我试过了,但它在同一行中给出了相同的错误