Как я могу обновить и вставить значение в мой столбец внешнего ключа? - PullRequest
0 голосов
/ 05 сентября 2018

Я хочу вставить и обновить свою таблицу. В моем запросе указывается только первичный ключ, имя товара, описание, цена и т. Д. Проблема в том, что у меня есть еще один столбец - FOREIGN KEY. Когда я пытаюсь вставить значения в таблицу базы данных предметов, происходит ошибка. В нем говорится, что количество столбцов не совпадает со значением в строке 1. А также как я могу обновить таблицу, если у меня есть столбец FOREIGN KEY?

class Item
    {
        public int ItemID { get; set; }
        public string ItemName { get; set; }
        public string Description { get; set; }
        public string Price { get; set; }
        public string Stocks { get; set; }

        public int GenerateID()
        {
            int newID = 0;
            Connection connection = new Connection();
            string sql = "SELECT ItemID FROM tbl_Item ORDER BY ItemID DESC Limit 1";
            MySqlConnection conn = new MySqlConnection(connection.ConnectionString);
            MySqlCommand cmd = new MySqlCommand(sql, conn);
            conn.Open();
            MySqlDataReader dr = cmd.ExecuteReader();
            if (dr.HasRows)
            {
                dr.Read();
                newID = dr.GetInt32("ItemID");
            }
            conn.Close();
            newID++;
            return newID;
        }

        public void UpdateRecord()
        {
            try
            {
                Connection connection = new Connection();
                string sql = "UPDATE Item SET ItemName=@itemName, Description=@desc, Price=@price, Stocks=@stocks WHERE ItemID=@itemId";
                MySqlConnection conn = new MySqlConnection(connection.ConnectionString);
                MySqlCommand cmd = new MySqlCommand(sql, conn);
                cmd.Parameters.AddWithValue("@itemId", ItemID);
                cmd.Parameters.AddWithValue("@itemName", ItemName);
                cmd.Parameters.AddWithValue("@desc", Description);
                cmd.Parameters.AddWithValue("@price", Price);
                cmd.Parameters.AddWithValue("@stocks", Stocks);

                conn.Open();
                cmd.ExecuteNonQuery();
                conn.Close();
                MessageBox.Show("Update Successfully", "Update Record", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
            catch (Exception e)
            {
                MessageBox.Show("An error occured: " + e, "ERROR", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        public void InsertRecord()
        {
            Connection connection = new Connection();
            try
            {
                string sql = "INSERT INTO tbl_Account VALUES(@itemId, @itemName, @desc, @price, @stocks)";
                MySqlConnection conn = new MySqlConnection(connection.ConnectionString);
                MySqlCommand cmd = new MySqlCommand(sql, conn);
                cmd.Parameters.AddWithValue("@itemId", ItemID);
                cmd.Parameters.AddWithValue("@itemName", ItemName);
                cmd.Parameters.AddWithValue("@desc", Description);
                cmd.Parameters.AddWithValue("@price", Price);
                cmd.Parameters.AddWithValue("@stocks", Stocks);
                conn.Open();
                cmd.ExecuteNonQuery();
                conn.Close();

                MessageBox.Show("Update Successfully", "Update Record", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
            catch (Exception e)
            {
                MessageBox.Show("An error occurred: " + e, "ERROR", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }
    }
//for button ADD
private void btnAddItem_Click(object sender, EventArgs e)
        {
            Item item = new Item();

            item.ItemID = item.GenerateID();
            item.ItemName = txtINameItem.Text;
            item.Description = txtDescriptionItem.Text;
            item.Price = txtPriceItem.Text;
            item.Stocks = textStocksItem.Text;

            item.InsertRecord();
        }

1 Ответ

0 голосов
/ 10 сентября 2018

Ваш код SQL неверен. Вы должны передать действительное значение внешнего ключа при вставке записи. Допустимое значение внешнего ключа - это значение, уже существующее в родительской таблице OR NULL. Тем не менее, установка NULL в столбец внешнего ключа зависит от того, как вы создали внешний ключ для дочерней таблицы.

Попробуйте приведенный ниже код, заменив @fkValue & FkValue на правильный порядок столбцов внешнего ключа в дочерней таблице и значение:

                string sql = "INSERT INTO tbl_Account VALUES(@itemId, @fkValue, @itemName, @desc, @price, @stocks)";
                MySqlConnection conn = new MySqlConnection(connection.ConnectionString);
                MySqlCommand cmd = new MySqlCommand(sql, conn);
                cmd.Parameters.AddWithValue("@itemId", ItemID);
                cmd.Parameters.AddWithValue("@fkValue", FkValue);
                cmd.Parameters.AddWithValue("@itemName", ItemName);
                cmd.Parameters.AddWithValue("@desc", Description);
                cmd.Parameters.AddWithValue("@price", Price);
                cmd.Parameters.AddWithValue("@stocks", Stocks);
                conn.Open();
                cmd.ExecuteNonQuery();
                conn.Close();

Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...