C# 如何从数据列表更新数据库表?

C# 如何从数据列表更新数据库表?,c#,asp.net,database,datalist,C#,Asp.net,Database,Datalist,我正在建立一个电子商务网站,我使用一个数据列表来显示我的产品,当我按下“添加到购物车”按钮时,它们应该被添加到一个数据库表中,但由于某种原因,产品没有在数据库表中更新。此外,单击第1个产品会出现一个错误,显示“已经有一个打开的读卡器”,显示错误的行是“int result=comm.ExecuteNonQuery();” 尝试按如下方式更新代码: if (e.CommandName == "AddToCart") { bool productExists = false;

我正在建立一个电子商务网站,我使用一个数据列表来显示我的产品,当我按下“添加到购物车”按钮时,它们应该被添加到一个数据库表中,但由于某种原因,产品没有在数据库表中更新。此外,单击第1个产品会出现一个错误,显示“已经有一个打开的读卡器”,显示错误的行是“int result=comm.ExecuteNonQuery();”


尝试按如下方式更新代码:

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()我试过了,但它在同一行中给出了相同的错误