CheckedListBoxControl Devexpress C # ---- Сохранение всех элементов в базе данных MysQL - PullRequest
0 голосов
/ 04 июля 2018

ОК. Это новое редактирование этого вопроса. Как вы увидите в моем коде ниже, я делаю так, чтобы я перебирал каждый элемент, а затем предполагалось получить проверенное и непроверенное значение каждого элемента и затем сохранить их. в моей базе данных MySql, но в тот момент, когда я сохраняю, он сохраняет, но все элементы сохраняются в логическое значение true , а не в логическое значение, назначаемое мной, которое должно быть логическое значение, Это означает, что если элемент проверен, то логическое значение должно быть истинным, в то время как элемент не проверен, логическое значение должно быть ложным, и это должно быть сохранено, но ... ну, это сохраняет все в истине. Как я могу решить эту проблему у меня?

private void SbtnGuarda_Click(object sender, EventArgs e)
    {
        try
        {
            String id = txtId.Text.Trim();               
            for (int i = 0; i < CLBCpermits.ItemCount; i++)
            {
                object Row = CLBCpermits.GetItem(i);
                DataRowView rew = Row as DataRowView;
                Boolean value = Convert.ToBoolean(CLBCpermits.GetItemCheckState((int)rew["SecOptionId"] - 1));
                int opti = (int)rew["SecOptionId"];                   
                string qry = string.Format("INSERT INTO TblSecProfile (Id, OptActive, SecOptionId) VALUES ('{0}', '{1}', '{2}');", id, value, opti);
                using (MySqlConnection conn = new MySqlConnection(Global.ConnectionStringMySql))
                {
                    conn.Open();

                    using (MySqlCommand comm = new MySqlCommand(qry, conn))
                    {
                        comm.ExecuteNonQuery();
                    }

                    conn.Close();
                }      
            }

            XtraMessageBox.Show("Permits assigned to profile", "Process Finished", MessageBoxButtons.OK, MessageBoxIcon.Information);
            SbtnGuarda.Enabled = false;
            SbtnActualiza.Enabled = true;

        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message, "Error while giving permits", MessageBoxButtons.OK, MessageBoxIcon.Error);
        }

    }

Любая помощь очень ценится, и спасибо за то, что вы 4 раза редактируете этот пост.

1 Ответ

0 голосов
/ 10 июля 2018

Прежде всего, используйте параметры запроса. Ваш текущий код опасен. Посмотрите «SQL-инъекция», если вы не уверены, почему я так говорю.

Теперь, используя параметры, вы получите это:

var query = "INSERT INTO TblSecProfile (Id, OptActive, SecOptionId) VALUES (@id, @optActive, @secOptionId)";

И позже ...

comm.Parameters.Add("@id", MySqlDbType.Int32).Value = id;
comm.Parameters.Add("@optActive", MySqlDbType.Bit).Value = value;
comm.Parameters.Add("@secOptionId", MySqlDbType.Int32).Value = opti;
comm.ExecuteNonQuery();

Я предполагаю, что, поскольку вы вводите значение String в типизированный столбец BIT в запросе, выполняется преобразование и выполняется преобразование всего в TRUE.

...