【问题标题】:SqlCommand INSERT INTO only for rows selected by checkBox issueSqlCommand INSERT INTO 仅适用于复选框问题选择的行
【发布时间】:2013-07-16 02:08:38
【问题描述】:

大家好,我有这些插入和选择的 SqlCommands。我需要添加到 prikaz2(其中 INSERT INTO)条件,它将仅 INSERT INTO 由 CHECKBOX 选择的这些行。

我很长时间以来一直在想这个问题,但我的代码都无法做到这一点。

你们有什么建议吗?在我看来,我必须添加“WHERE”?

  SqlCommand comm = new SqlCommand("Select MAX (ID_K) FROM klient", spojeni);
            spojeni.Open();
            int max = (int)comm.ExecuteScalar();
            spojeni.Close();

            for (int i = 0; i < dtg_ksluzby.Rows.Count; i++)
            {
                SqlCommand prikaz2 = new SqlCommand("INSERT INTO klisluz(text,pocet,akce,subkey) values(@val1,@val2,@val3,@val4) ", spojeni); // here I need to add condition to INSERT INTO only selected rows
                prikaz2.Parameters.AddWithValue("@val1", dtg_ksluzby.Rows[i].Cells["text"].Value);
                prikaz2.Parameters.AddWithValue("@val2", dtg_ksluzby.Rows[i].Cells["pocet"].Value);
                prikaz2.Parameters.AddWithValue("@val3", dtg_ksluzby.Rows[i].Cells["akce"].Value);
                prikaz2.Parameters.AddWithValue("@val4", max + 1);                     spojeni.Open();
                prikaz2.ExecuteNonQuery();
                spojeni.Close();
  } 
     private void dtg_ksluzby_CellValueChanged(object sender,
                                   DataGridViewCellEventArgs e)

这是我选择行的代码。e

     foreach (DataGridViewRow row in dtg_ksluzby.Rows)
     {

         DataGridViewCheckBoxCell chk1 = row.Cells[3] as DataGridViewCheckBoxCell;
         if (Convert.ToBoolean(chk1.Value) == true)
         {

             MessageBox.Show("Služba byla vybrána");
         }
         else
         {
         }
     }

【问题讨论】:

    标签: c# sql sql-server datagridview sqlcommand


    【解决方案1】:

    因此,用迭代 dtg_ksluzby.Rows 的 ForEach 替换您的 for 循环,并执行检查以查看它是否在循环内进行检查。

    foreach (DataGridViewRow row in dtg_ksluzby.Rows)
            {
                if (Convert.ToBoolean(row.Cells[3].Value) == true) // check this line here
                {
                    SqlCommand prikaz2 = new SqlCommand("INSERT INTO klisluz(text,pocet,akce,subkey) values(@val1,@val2,@val3,@val4) ", spojeni); 
                    prikaz2.Parameters.AddWithValue("@val1", row.Cells["text"].Value);
                    prikaz2.Parameters.AddWithValue("@val2", row.Cells["pocet"].Value);
                    prikaz2.Parameters.AddWithValue("@val3", row.Cells["akce"].Value);
                    prikaz2.Parameters.AddWithValue("@val4", max + 1);                     
                    spojeni.Open();
                    prikaz2.ExecuteNonQuery();
                    spojeni.Close();
                }
            }
    

    【讨论】:

    • 好吧,我需要在单击按钮时执行此操作,以便 INSERT INTO 在按钮单击中。你能帮我写代码吗?
    • 这样不行吗?我没有对此进行测试,因此语法可能已经失效,但它应该为您指明正确的方向?
    • 它说 2 个错误:名称“chk1”在当前上下文中不存在。当前上下文中不存在名称“i”。
    • 尝试最后一次编辑,然后进行一些挖掘。您需要做的是在运行插入命令之前检查包含复选框的行中的单元格。
    【解决方案2】:

    加入这两个语句怎么样?

    INSERT INTO klisluz(text,pocet,akce,subkey) 
    VALUES (@val1,
            @val2,
            @val3,
            COALESCE((Select MAX (ID_K) FROM klient) + 1, 1)
    

    【讨论】:

    • 这很好,但我怎样才能只插入选定的行?
    猜你喜欢
    • 2012-06-01
    • 2019-01-10
    • 2013-07-08
    • 2014-02-11
    • 2013-03-09
    • 2014-08-26
    • 2016-11-28
    • 2022-12-18
    • 2010-11-17
    相关资源
    最近更新 更多