private void FillListConnections()
        {
            DataBase db = new DataBase("prime_db");

            db.OpenConnection();
            MySqlCommand    command = new MySqlCommand($"SELECT First_Atr_ID, Second_Atr_ID, Connection_ID FROM `connection`", db.GetConnection());
            MySqlDataReader reader  = command.ExecuteReader();

            while (reader.Read())
            {
                IDataRecord record = (IDataRecord)reader;
                ConnectionsListBox.Items.Add($"{Convert.ToInt32(record[2])}   {GetAttrName(Convert.ToInt32(record[0]))} ----> {GetAttrName(Convert.ToInt32(record[1]))}");
            }
            db.CloseConnection();
        }
        private void FillListTables()
        {
            comboBoxTables.Items.Clear();
            DataBase db = new DataBase("prime_db");

            db.OpenConnection();
            MySqlCommand    command = new MySqlCommand("SELECT Name FROM `table`", db.GetConnection());
            MySqlDataReader reader  = command.ExecuteReader();

            while (reader.Read())
            {
                comboBoxTables.Items.Add(reader.GetValue(0).ToString());
            }
            db.CloseConnection();
        }
        private void FillListAttrs()
        {
            AllAttrsListBox.Items.Clear();
            DataBase db = new DataBase("prime_db");

            db.OpenConnection();
            MySqlCommand    command = new MySqlCommand($"SELECT Attribute_Name FROM `attribute` WHERE Table_ID = {GetTableID(comboBoxTables.Text)}", db.GetConnection());
            MySqlDataReader reader  = command.ExecuteReader();

            while (reader.Read())
            {
                AllAttrsListBox.Items.Add(reader.GetValue(0).ToString());
            }
            db.CloseConnection();
        }
        private List <string> GetAllTableNames()
        {
            List <string> res   = new List <string>();
            DataBase      mData = new DataBase("prime_db");

            mData.OpenConnection();
            MySqlCommand    com    = new MySqlCommand("SELECT Name FROM `table`", mData.GetConnection());
            MySqlDataReader reader = com.ExecuteReader();

            while (reader.Read())
            {
                res.Add(reader.GetValue(0).ToString());
            }
            mData.CloseConnection();
            return(res);
        }
예제 #5
0
        private void depTableComboBox_TextChanged(object sender, EventArgs e)
        {
            depAttrListBox.Items.Clear();
            DataBase mData = new DataBase("prime_db");

            mData.OpenConnection();
            MySqlCommand    com    = new MySqlCommand($"SELECT Attribute_Name FROM `attribute` WHERE Table_ID = {GetTableID(depTableComboBox.Text)}", mData.GetConnection());
            MySqlDataReader reader = com.ExecuteReader();

            while (reader.Read())
            {
                depAttrListBox.Items.Add(reader.GetValue(0).ToString());
            }
            mData.CloseConnection();
            CheckAttrsSelection();
        }
        //подключение к таблице
        private DataTable GetTable(DataBase db, string table_name)
        {
            try
            {
                db.OpenConnection();
                MySqlDataAdapter adapter = new MySqlDataAdapter();
                DataTable        table   = new DataTable();

                string       query_select_id = $"SELECT * FROM `{table_name}`";
                MySqlCommand command         = new MySqlCommand(query_select_id, db.GetConnection());
                adapter.SelectCommand = command;
                adapter.Fill(table);
                db.CloseConnection();
                return(table);
            }
            catch
            {
                MessageBox.Show("Данной таблицы не существует");
                return(null);
            }
        }
예제 #7
0
        private void CreateConnectionButton_Click(object sender, EventArgs e)
        {
            DataBase mData  = new DataBase("prime_db");
            DataBase userDB = new DataBase(currentDB);

            bool flag = false;

            userDB.OpenConnection();
            try
            {
                MySqlCommand com = new MySqlCommand($"ALTER TABLE `{depTableComboBox.Text}` ADD CONSTRAINT {depAttrListBox.SelectedItem}_refto_{refAttrListBox.SelectedItem} FOREIGN KEY ({depAttrListBox.SelectedItem}) REFERENCES `{refTableComboBox.Text}` ({refAttrListBox.SelectedItem}) ON UPDATE CASCADE ON DELETE CASCADE", userDB.GetConnection());
                com.ExecuteNonQuery();
            }
            catch (MySqlException ex)
            {
                MessageBox.Show("Невозможно установить связь по данным атрибутам");
                flag = true;
            }
            mData.OpenConnection();
            if (!flag)
            {
                DataTable table = GetTable(mData);
                int       nextID;
                if (table.Rows.Count > 0)
                {
                    nextID = UnicID(table);
                }
                else
                {
                    nextID = 1;
                }

                MySqlCommand com = new MySqlCommand($"INSERT INTO `connection` (Connection_ID,Connection_Name,First_Atr_ID,Second_Atr_ID,Connection_Description) VALUES ({nextID}, \"{depAttrListBox.SelectedItem}_refto_{refAttrListBox.SelectedItem}\", {GetAttrID(depAttrListBox.SelectedItem.ToString())}, {GetAttrID(refAttrListBox.SelectedItem.ToString())}, \"{richTextBox1.Text}\")", mData.GetConnection());
                com.ExecuteNonQuery();
                MessageBox.Show("Связь успешно добавлена");
            }
            userDB.CloseConnection();
            mData.CloseConnection();
        }
        private void Delete(string key_value)
        {
            GetKeyAttrib();
            DataBase     db;
            MySqlCommand command;
            string       query;


            if (delete_step == 0)
            {
                ShowOptionalTable(key_value, "delete");
            }
            else
            {
                db    = new DataBase(currentDB);
                query = $"DELETE FROM {get_table.Text} WHERE {attr_name} = {key_value}";
                db.OpenConnection();
                command = new MySqlCommand(query, db.GetConnection());
                if (command.ExecuteNonQuery() == 1)
                {
                    MessageBox.Show("Запись успешно удалена");
                    if (dataTable.Rows.Count != 0)
                    {
                        dataTable.Rows[0].Delete();
                    }
                    Optional_table.DataSource = dataTable;
                    InputKeyShow();
                }
                else
                {
                    MessageBox.Show("Запись с данными значениями отсутствует");
                    dataTable.Rows.Clear();
                    InputKeyShow();
                }
                dataGridView.DataSource = GetTable(db, get_table.Text);
                db.CloseConnection();
            }
        }
        public void GetKeyAttrib()
        {
            DataBase        db;
            MySqlCommand    command;
            MySqlDataReader reader;
            string          query;

            query   = $"SELECT attribute.Attribute_Name, attribute.Is_Key FROM `attribute` INNER JOIN `table` ON (`attribute`.Table_ID = `table`.Table_ID) WHERE `table`.Name = \"{get_table.Text}\"";
            db      = new DataBase("prime_db");
            command = new MySqlCommand(query, db.GetConnection());
            db.OpenConnection();
            reader = command.ExecuteReader();

            while (reader.Read())
            {
                if (reader.GetValue(1).ToString() == "True")
                {
                    attr_name = reader.GetValue(0).ToString();
                }
            }
            db.CloseConnection();
            reader.Close();
        }
        private void FillKeyLists()
        {
            KeyItemsListbox.Items.Clear();
            NonKeyItemsListbox.Items.Clear();
            DataBase mData = new DataBase("prime_db");

            mData.OpenConnection();
            MySqlCommand    com    = new MySqlCommand($"SELECT Attribute_Name FROM `attribute` WHERE Table_ID = {GetTableID(comboBoxTables.Text)}", mData.GetConnection());
            MySqlDataReader reader = com.ExecuteReader();

            while (reader.Read())
            {
                string currAttr = reader.GetValue(0).ToString();
                if (GetKeyValue(currAttr) == 1)
                {
                    KeyItemsListbox.Items.Add(currAttr);
                }
                else
                {
                    NonKeyItemsListbox.Items.Add(currAttr);
                }
            }
            mData.CloseConnection();
        }
        private void CreateAttrButton_Click(object sender, EventArgs e)
        {
            DataBase mData  = new DataBase("prime_db");
            DataBase userDB = new DataBase(currentDB);
            int      tID    = GetTableID(tableName);

            int UniqueValue  = 0;
            int KeyValue     = 0;
            int CanNullValue = 0;

            if (UniqueCheckBox.Checked)
            {
                UniqueValue = 1;
            }
            if (CanNullCheckBox.Checked)
            {
                CanNullValue = 1;
            }

            string attrName = AttrNametextBox.Text;
            string type     = TypescomboBox.Text;
            string strValue = StartValueTextBox.Text;
            string desc     = richTextBox1.Text;

            #region CreateAttr
            bool         flag = false;
            MySqlCommand altCom;

            try
            {
                userDB.OpenConnection();
                string nullDef = "NULL";
                if (CanNullValue == 0)
                {
                    nullDef = "Not Null";
                }
                altCom = new MySqlCommand($"ALTER TABLE `{tableName}` ADD COLUMN {attrName} {type} {nullDef}", userDB.GetConnection());
                altCom.ExecuteNonQuery();

                if (UniqueValue == 1)
                {
                    altCom = new MySqlCommand($"ALTER TABLE `{tableName}` ADD CONSTRAINT {attrName}_un_const UNIQUE ({attrName})", userDB.GetConnection());
                    altCom.ExecuteNonQuery();
                }
            }catch (MySqlException)
            {
                flag = true;
                MessageBox.Show("Не получилось добавить новый атрибут");
            }

            try
            {
                altCom = new MySqlCommand($"ALTER TABLE `{tableName}` DROP COLUMN `I_D`", userDB.GetConnection());
                altCom.ExecuteNonQuery();
            }
            catch (MySqlException ex)
            {
                //Игнорируем, если удаление уже производилось
            }
            #endregion

            if (!flag)
            {
                #region InsertIntoPrime

                mData.OpenConnection();
                DataTable table = GetTable(mData);
                int       nextID;
                if (table.Rows.Count > 0)
                {
                    nextID = UnicID(table);
                }
                else
                {
                    nextID = 1;
                }

                MySqlCommand commandIns = new MySqlCommand($"INSERT INTO `attribute` (Attribute_ID,Attribute_Name,Type,Start_Value,Is_Unique,Is_Key,Can_Null,Description,Table_ID) VALUES ({nextID},\"{attrName}\",\"{type}\",\"{strValue}\",{UniqueValue},{KeyValue},{CanNullValue},\"{desc}\",{tID})", mData.GetConnection());
                commandIns.ExecuteNonQuery();
                mData.CloseConnection();
                #endregion



                if (strValue != "")
                {
                    try
                    {
                        userDB.OpenConnection();
                        switch (type)
                        {
                        case ("Int"):
                        {
                            MySqlCommand defCom = new MySqlCommand($"ALTER TABLE `{tableName}` ALTER COLUMN `{attrName}` SET DEFAULT {strValue} ", userDB.GetConnection());
                            defCom.ExecuteNonQuery();
                            break;
                        }

                        default:
                        {
                            MySqlCommand defCom = new MySqlCommand($"ALTER TABLE `{tableName}` ALTER COLUMN `{attrName}` SET DEFAULT '{strValue}' ", userDB.GetConnection());
                            defCom.ExecuteNonQuery();
                            break;
                        }
                        }
                    }
                    catch (MySqlException ex)
                    {
                        MessageBox.Show($"Значение по умолчанию введено некорректно. Атрибут {attrName} добавлен без значения по умолчанию.");
                        DBChangeForm tform = new DBChangeForm(currentDB, tableName);
                        tform.Show();
                        this.Hide();
                        return;
                    }
                }

                DBChangeForm form = new DBChangeForm(currentDB, tableName);
                form.Show();
                this.Hide();
                MessageBox.Show($"Атрибут {attrName} успешно добавлен!");
            }
            else
            {
                DBChangeForm form = new DBChangeForm(currentDB, tableName);
                form.Show();
                this.Hide();
            }
        }
        private void ShowOptionalTable(string key_value, string func)
        {
            GetKeyAttrib();
            DataBase        db;
            MySqlCommand    command;
            MySqlDataReader reader;
            string          query;

            query   = $"SELECT * FROM {get_table.Text} WHERE {attr_name} = {key_value}";
            db      = new DataBase(currentDB);
            command = new MySqlCommand(query, db.GetConnection());
            db.OpenConnection();
            reader = command.ExecuteReader();

            try
            {
                DataRow row;
                row = dataTable.NewRow();
                if (reader.HasRows != false)
                {
                    while (reader.Read())
                    {
                        for (int i = 0; i < dataTable.Columns.Count; i++)
                        {
                            row[$"{dataTable.Columns[i].ColumnName}"] = reader.GetValue(i);
                        }
                    }

                    dataTable.Rows.Add(row);
                    Optional_table.DataSource = dataTable;
                    reader.Close();
                    db.CloseConnection();
                    if (func == "delete")
                    {
                        delete_step++;
                    }
                    else
                    {
                        update_step++;
                    }
                    InputKeyHide();
                    MessageBox.Show("Выбрана следующая запись, для продолжения нажмите Далее");
                }
                else
                {
                    MessageBox.Show("Запись не найдена");
                    if (func == "delete")
                    {
                        delete_step = 0;
                    }
                    else
                    {
                        update_step = 0;
                    }
                }
            }
            catch
            {
                MessageBox.Show("Ой! Что-то пошло не так!");
            }
        }
        private void Update(string key_value)
        {
            GetKeyAttrib();
            DataBase     db;
            MySqlCommand command;

            string query;

            if (update_step == 0)
            {
                ShowOptionalTable(key_value, "update");
                AddDefaultRow();
            }
            else
            {
                db = new DataBase(currentDB);
                string   values = "";
                string   temp   = "";
                string   temp2;
                string[] data = new string[2];
                for (int i = 0; i < dataTable.Columns.Count; i++)
                {
                    temp = Optional_table[i, 1].Value.ToString();

                    if (dataTable.Columns[i].DataType.ToString() == "System.DateTime")
                    {
                        temp    = $"{temp.Substring(0, 10)}";
                        data    = temp.Split('.');
                        temp2   = data[2];
                        data[2] = data[0];
                        data[0] = temp2;
                        temp    = $"\"{data[0]}.{data[1]}.{data[2]}\"";
                    }

                    if (dataTable.Columns[i].DataType.ToString() == "System.String")
                    {
                        temp = $"\"{temp}\"";
                    }

                    values += $"`{dataTable.Columns[i].ColumnName.Trim('*')}`={temp},";
                }
                values = values.Trim(',');

                query = $"UPDATE `{get_table.Text}` SET {values} WHERE {attr_name} = {key_value}";
                db.OpenConnection();
                command = new MySqlCommand(query, db.GetConnection());
                if (command.ExecuteNonQuery() == 1)
                {
                    MessageBox.Show("Запись успешно обновлена");
                    dataTable.Rows.Clear();
                    Optional_table.DataSource = dataTable;
                    InputKeyShow();
                    update_step++;
                }
                else
                {
                    MessageBox.Show("");
                    dataTable.Rows.Clear();
                    InputKeyShow();
                }
                dataGridView.DataSource = GetTable(db, get_table.Text);
                db.CloseConnection();
            }
        }
        private void Insert()
        {
            //char kavichka = '"';
            string       query   = $"SELECT attribute.Attribute_Name, attribute.Is_Key FROM `attribute` INNER JOIN `table` ON (`attribute`.Table_ID = `table`.Table_ID) WHERE `table`.Name = \"{get_table.Text}\"";
            DataBase     db      = new DataBase("prime_db");
            MySqlCommand command = new MySqlCommand(query, db.GetConnection());

            db.OpenConnection();
            MySqlDataReader reader = command.ExecuteReader();

            attr_name = "";

            while (reader.Read())
            {
                attr_name += "`" + reader.GetValue(0).ToString() + "`,";
            }
            attr_name = attr_name.Trim(',');
            db.CloseConnection();
            db = new DataBase(currentDB);

            try
            {
                db.OpenConnection();
                string   values = "";
                string   temp;
                string   temp2;
                string[] data = new string[2];
                for (int i = 0; i < Optional_table.Columns.Count; i++)
                {
                    temp = Optional_table.Rows[0].Cells[i].Value.ToString();
                    if (dataTable.Columns[i].DataType.ToString() == "System.DateTime")
                    {//values += $"\"{DateTime.Parse(temp).ToString("d")}\",";
                        temp    = $"{temp.Substring(0, 10)}";
                        data    = temp.Split('.');
                        temp2   = data[2];
                        data[2] = data[0];
                        data[0] = temp2;
                        temp    = $"\"{data[0]}.{data[1]}.{data[2]}\"";
                    }
                    if (dataTable.Columns[i].DataType.ToString() == "System.String")
                    {
                        temp = $"\"{temp}\"";
                    }
                    values += $"{temp},";
                }
                values  = values.Trim(',');
                query   = $"INSERT INTO `{get_table.Text}` ({attr_name}) VALUES ({values});";
                command = new MySqlCommand(query, db.GetConnection());

                if (command.ExecuteNonQuery() == 1)
                {
                    MessageBox.Show("Запись успешно добавлена");
                    dataGridView.DataSource = GetTable(db, get_table.Text);
                    dataTable.Rows.Clear();
                    AddDefaultRow();
                }
                else
                {
                    MessageBox.Show("Ой! Что-то пошло не так!");
                }
                db.CloseConnection();
            }
            catch (MySqlException)
            {
                MessageBox.Show("Данное значение ключевого атрибута уже существует в таблице. Введите уникальное значение.");
            }
            catch (Exception ex)
            {
                MessageBox.Show("ERROR:" + ex.Message);
            }
        }