2016-04-19 3 views
1

У меня есть этот запрос на обновлении не работает даже не показывает никаких ошибок, только нет строк осуществляются/совпадения:MySQL - UPDATE запрос не осуществление строки

UPDATE `Budget` SET `amount` = 500, `rest` = 500 WHERE `company_number` = 1 AND `section_number` = 1 AND `chapter_number` = 1 AND `article_number` = 3 AND `subarticle_number` = 0 AND `ssubarticle_number` = 0 

Но когда я делаю «SELECT» из базы данных я получил ряд возвращаемый:

SELECT * FROM Budget WHERE `company_number` = 1 AND `section_number` = 1 AND `chapter_number` = 1 AND `article_number` = 3 AND `subarticle_number` = 0 AND `ssubarticle_number` = 0 

Это «бюджет» таблица:

CREATE TABLE `budget` (
    `budget_id` int(11) NOT NULL AUTO_INCREMENT, 
    `company_number` int(11) NOT NULL DEFAULT '0', 
    `section_number` int(11) NOT NULL DEFAULT '0', 
    `chapter_number` int(11) NOT NULL DEFAULT '0', 
    `article_number` int(11) NOT NULL DEFAULT '0', 
    `subarticle_number` int(11) NOT NULL DEFAULT '0', 
    `ssubarticle_number` int(11) NOT NULL DEFAULT '0', 
    `name` varchar(90) DEFAULT NULL, 
    `amount` double DEFAULT NULL, 
    `rest` double DEFAULT NULL, 
    `insert_date` date DEFAULT NULL, 
    `transfer_date` date DEFAULT NULL, 
    `has_children` bit(1) DEFAULT NULL, 
    PRIMARY KEY (`budget_id`) 
) ENGINE=InnoDB AUTO_INCREMENT=16 DEFAULT CHARSET=utf8; 

метод я использую для запуска запросов.

public bool UpdateTransfer(string companyNumber, string sectionNumber, string transferNumber, string TransferDate, 
            string[] budgetRow, string oldAmount, string newAmount) 
     { 
      MySqlTransaction tr = connection.BeginTransaction(); 
      cmdQuery = connection.CreateCommand(); 
      cmdQuery.Connection = connection; 
      cmdQuery.Transaction = tr; 
      try 
      { 
       cmdQuery.CommandText = @"SET SQL_SAFE_UPDATES = 0;"; 
       cmdQuery.ExecuteNonQuery(); 


       // First, we return the old amount to the source row budget 
       cmdQuery.CommandText = @"UPDATE Budget SET `rest` = `rest` + " + oldAmount + 
             " WHERE `company_number` = " + companyNumber + " AND `section_number` = " + sectionNumber + 
             " AND `chapter_number` = " + budgetRow[0] + " AND `article_number` = " + budgetRow[1] + 
             " AND `subarticle_number` = " + budgetRow[2] + " AND `ssubarticle_number` = " + budgetRow[3]; 
       cmdQuery.ExecuteNonQuery(); 
       MessageBox.Show(cmdQuery.CommandText); 

       // Second, we make the transfer and substract the new amount from the source row budget 
       cmdQuery.CommandText = @"UPDATE `Budget` SET `rest` = `rest` - " + newAmount + 
             " WHERE `company_number` = " + companyNumber + " AND `section_number` = " + sectionNumber + 
             " AND `chapter_number` = " + budgetRow[0] + " AND `article_number` = " + budgetRow[1] + 
             " AND `subarticle_number` = " + budgetRow[2] + " AND `ssubarticle_number` = " + budgetRow[3]; 
       cmdQuery.ExecuteNonQuery(); 
       MessageBox.Show(cmdQuery.CommandText); 

       // Third, update the rest and new amount of destination row budget 
       cmdQuery.CommandText = @"UPDATE `Budget` SET `amount` = " + newAmount + ", `rest` = " + newAmount + 
             " WHERE `company_number` = " + companyNumber + " AND `section_number` = " + sectionNumber + 
             " AND `chapter_number` = " + budgetRow[4] + " AND `article_number` = " + budgetRow[5] + 
             " AND `subarticle_number` = " + budgetRow[6] + " AND `ssubarticle_number` = " + budgetRow[7]; 
       cmdQuery.ExecuteNonQuery(); 
       MessageBox.Show(cmdQuery.CommandText); 

       // Last step, update the transfer table. 
       cmdQuery.CommandText = @"UPDATE `Transfer` SET `amount` = " + newAmount + ", `transfer_date` ='" + TransferDate + "'" + 
             " WHERE `transfer_number` = " + transferNumber + 
             " AND `company_number` = " + companyNumber + " AND `section_number` = " + sectionNumber + 
       cmdQuery.ExecuteNonQuery(); 
       MessageBox.Show(cmdQuery.CommandText); 

       cmdQuery.CommandText = @"SET SQL_SAFE_UPDATES = 1;"; 
       cmdQuery.ExecuteNonQuery(); 
       tr.Commit(); 
       return true; 
      } 
      catch (MySqlException ex) 
      { 
       MessageBox.Show("error " + ex.ErrorCode.ToString()); 
       tr.Rollback(); 
       return false; 
      } 
     } 
    } 
+0

Каков результат вашего оператора SELECT? –

+0

Он только даст вам обновленные строки, если что-то изменилось. Может быть, они уже обновлены? – tadman

+0

Вы отметили это как вопрос 'C#. Не работает ли ваш 'UPDATE' только через C#, или же он не работает из командной строки? –

ответ

0

Вот пример того, как можно проверить, есть ли изменения строки после выполнения вашего SQL на C#

public static Boolean PerformDatabaseAction(string sqlQuery) 
{ 
    using (SqlConnection con = DbConnect()) // Get SqlConnection 
    { 
     SqlCommand cmd = new SqlCommand(sqlQuery); 
     cmd = new SqlCommand(sqlQuery); 
     CommandType = System.Data.CommandType.Text; 
     Connection = con; 
     int rows = cmd.ExecuteNonQuery(); // Gets the count of affected rows 
     if(rows > 0) 
      return true; 
     else 
      return false; 
    } 
} 

И ваш запрос работает так попробовать его на этом.

+0

Я пробовал оба, выполняя запросы с C#, и делаю это вручную, некоторые запросы работают, а другие нет. Вот почему я не мог понять. –