none
我想寫一個功能可以刪除mysql裡中的資料透過checkbox來勾選 RRS feed

  • 問題

  • public partial class _Default : System.Web.UI.Page
    {
        
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!this.IsPostBack)
            {
                
            this.BindGrid();
            }
        }
    
        private void BindGrid()
        {
            string constr = ConfigurationManager.ConnectionStrings["LocalMysql"].ConnectionString;
            using (MySqlConnection con = new MySqlConnection(constr))
            {
                using (MySqlCommand cmd = new MySqlCommand("SELECT s_id,s_password FROM student"))
                {
                    using (MySqlDataAdapter sda = new MySqlDataAdapter())
                    {
                        cmd.Connection = con;
                        sda.SelectCommand = cmd;
                        using (DataTable dt = new DataTable())
                        {
                            sda.Fill(dt);
                            GridView1.DataSource = dt;
                            GridView1.DataBind();
                        }
                    }
                }
            }
        }
    
       protected void Button1_Click(object sender, EventArgs e)
        {
            TextBox1.Text = "123";
        }
        protected void Button2_Click(object sender, EventArgs e)
        {
            
            string constr = ConfigurationManager.ConnectionStrings["LocalMysql"].ConnectionString;
            using (MySqlConnection con = new MySqlConnection(constr))
            {
                using (MySqlCommand cmd = new MySqlCommand("DELETE FROM student (s_id) value (@s_id)"))
                {
    
    
                    using (MySqlDataAdapter sda = new MySqlDataAdapter())
                    {
                        for (int i = 0; i < GridView1.Rows.Count; i++)
                        {
                            CheckBox ch = (CheckBox)GridView1.Rows[i].FindControl("CheckBox1");//將ROW的沒一段取出來
                            Label f_name = (Label)GridView1.Rows[i].FindControl("Label1");
                            //string A = "" + f_name;
                            if (ch.Checked == true)//TRUE是打勾而FALSE是沒有將他們區分
                            {
                                cmd.Parameters.AddWithValue("@s_id", label1);
                                cmd.Connection = con;
                                con.Open();
                                cmd.ExecuteNonQuery();
                                con.Close();
    
                            }
                            else
                            {
    
    
                            }
                        }
                       
                    }
                }
            }
            this.BindGrid();
           
        }
    
       
    }

    目前是寫這樣
    不過點下去之後不知道為什麼在cmd.ExecuteNonQuery();這裡會產生錯誤
    另外就是因為我用了gridview又在標籤裡寫了一個label1來儲存s_id的資訊

    會造成顯示的時候s_id出現兩次

    目前想法是說將勾選的部分儲存PK然後再進行刪除

    想問各位大大有沒有辦法可以解決我的問題><

    2015年8月22日 上午 05:23

解答

  • 您好,

    SQL應該為 DELETE FROM student where s_id = @s_id

    cmd.Parameters.AddWithValue("@s_id", label1); 前請先將原有的Parameters 清掉

    cmd.Parameters.Clear();

    或 在建立 command 後去新增 Parameter ,

    然後在 for 裡面直接去 assign 那Parameter 的值, 而不是一直新增 Parameter 。


    亂馬客blog: http://www.dotblogs.com.tw/rainmaker/

    • 已標示為解答 Chen Felix 2015年8月23日 下午 05:53
    2015年8月23日 上午 02:04

所有回覆

  • cmd.ExecuteNonQuery(); 錯誤訊息是甚麼?!

    感覺應該 "@s_id"被加入到Parameters,

    建議在 cmd.ExecuteNonQuery(); 之後 cmd.Parameters.Clear();


    2015年8月22日 上午 07:02
  • 您好,

    SQL應該為 DELETE FROM student where s_id = @s_id

    cmd.Parameters.AddWithValue("@s_id", label1); 前請先將原有的Parameters 清掉

    cmd.Parameters.Clear();

    或 在建立 command 後去新增 Parameter ,

    然後在 for 裡面直接去 assign 那Parameter 的值, 而不是一直新增 Parameter 。


    亂馬客blog: http://www.dotblogs.com.tw/rainmaker/

    • 已標示為解答 Chen Felix 2015年8月23日 下午 05:53
    2015年8月23日 上午 02:04
  • 感謝你的回答><
    2015年8月23日 下午 05:53