Проверьте значение в Mysql, если еще обновите значение - PullRequest
1 голос
/ 02 февраля 2012

У меня есть база данных с некоторыми столбцами под названием UPC title Описание и Количество. я пытаюсь проверить, существует ли уже номер UPC в столбце, и ЕСЛИ ЭТО ДЕЛАЕТ, то обновите количество этой записи на 1, вот что у меня есть:

    MySqlConnection connection = new MySqlConnection(MyConString);
                connection.Open();
                MySqlCommand command = connection.CreateCommand();
                command.CommandText = "INSERT INTO tableName " +
                           "(upc, title, description, quantity) " +
                       "VALUES " +
                           "(@upc, @title, @description, @quantity)";
                MySqlCommand upcCheck = connection.CreateCommand();
                upcCheck.CommandText = "Select COUNT (*) FROM tableName WHERE " +
                    "(upc=@upc) LIMIT 1";
                upcCheck.Parameters.AddWithValue("@upc", upc.Text); //Checks for duplicate UPCs
                MySqlDataReader check = upcCheck.ExecuteReader();
                    if( check.Read() != false)
                    {
                        command.Parameters.AddWithValue("@quantity",++); //not sure how to word it right
                    }


                command.Parameters.AddWithValue("@upc", upc.Text); //adding parameters SAFELY to the statement
                command.Parameters.AddWithValue("@title", titlename);
                command.Parameters.AddWithValue("@description", descname);
                command.Parameters.AddWithValue("@quantity", "1");

                MySqlDataReader result = command.ExecuteReader();

Я просто не знаю, как сказать это, чтобы сделать проверку.

UPDATE! Вот рабочий код.

    MySqlConnection connection = new MySqlConnection(MyConString);

                connection.Open();
                MySqlCommand updatecommand = connection.CreateCommand();

                updatecommand.CommandText = "UPDATE tableName Set quantity = quantity +1 " +
                    "WHERE upc = @upc";
                updatecommand.Parameters.AddWithValue("@upc", upc.Text);
                using (MySqlDataReader updateResult = updatecommand.ExecuteReader())
                {


                    if (updateResult.RecordsAffected == 0)
                    {
                        affected = true;
                    }
                    else
                    {
                        affected = false;
                    }
                }
                 if(affected == true)
                {

                    MySqlCommand command = connection.CreateCommand();
                    command.CommandText = "INSERT INTO tableName " +
                        "(upc, title, description, quantity) " +
                    "VALUES " +
                        "(@upc, @title, @description, @quantity)";
                    command.Parameters.AddWithValue("@upc", upc.Text);
                    command.Parameters.AddWithValue("@title", titlename);//adding parameters SAFELY to the statement
                    command.Parameters.AddWithValue("@description", descname);
                    command.Parameters.AddWithValue("@quantity", "1");



                    MySqlDataReader result = command.ExecuteReader();
                }

Ответы [ 2 ]

1 голос
/ 02 февраля 2012

Хотя я не работал специально с MySqlDataReader, я бы немного изменил запросы вокруг ... в противном случае формат (параметризация), который вы используете для вставки, полностью подходит.

Хотя функция ON DUPLICATE KEY UPDATE, предоставленная Христо, хороша, вам не хватало бы других элементов столбца для вашей записи. Я бы изменил на ..

MySqlCommand command = connection.CreateCommand();
command.CommandText = "UPDATE tableName Set Quantity = Quantity +1 " +
                           "WHERE upc = @upc"
command.Parameters.AddWithValue("@upc", upc.Text);

** Не знаю, как значение / статус будет возвращено из MySqlDataReader, но

result = command.ExecuteReader();

if( the status indicates it actually succeeded in an update, 
    or how many records were updated > 0 )
  return;  // you've just increased the counter...

ПРОЧЕЕ, его не было в файле ... продолжить с остальной частью вашей команды SQL-вставки, мы можем перезаписать последний экземпляр команды ...

command = connection.CreateCommand();
command.CommandText = "INSERT INTO tableName " +
                           "(upc, title, description, quantity) " +
                       "VALUES " +
                           "(@upc, @title, @description, @quantity)";

command.Parameters.AddWithValue("@upc", upc.Text);
command.Parameters.AddWithValue("@title", titlename);
command.Parameters.AddWithValue("@description", descname);
command.Parameters.AddWithValue("@quantity", "1");

result = command.ExecuteReader();
1 голос
/ 02 февраля 2012

Если UPC - ваш первичный ключ, вы можете использовать INSERT ON DUPLICATE KEY UPDATE функциональность базы данных MySQL. Если вы не хотите INSERT, то новый UPC просто запустите запрос UPDATE, если такой строки нет, если это не повлияет на данные в таблице.

UPDATE <tablename> SET quantity=quantity+1 WHERE UPC='<upc>'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...