2016-06-05 2 views
0

В качестве приложения, которое я пытаюсь разработать, является обновление записей в соответствии с типом службы. Следовательно, атрибут Status оценивается от 1 до 8 (In progress = 3 и Complete = 5). Я сделал свой код, но он, кажется, не работает, как я пытаюсь передать значения и протестировать обновление текущего типа службы, как следующее:Обновление поля базы данных

IF, то прогресс обновления 4
IF Завершена обновит 6

class Program 
{ 
    static void Main(string[] args) 
    { 
     int Bend = 4; 
     int Complete = 6; 

     List<int> Status = new List<int>(); 

     foreach (int i in Status) 
     { 
      if (i == 3) 
      { 
       SqlConnection con = new SqlConnection(@"Data Source= 
       (localdb)\Projects;Initial Catalog=FLS_DB;Integrated 
       Security=True;Connect Timeout=30;Encrypt=False;"); 
       con.Open(); 
       SqlCommand cmd = new SqlCommand("Update Calls set 
       Service [email protected]", con); 
       cmd.CommandType = CommandType.Text; 
       cmd.Parameters.AddWithValue("@Service", Bend); 
       con.Open(); 
       int rowsAffected = cmd.ExecuteNonQuery(); 
       con.Close(); 
      } 
      else if (i == 5) 
      { 
       SqlConnection con = new SqlConnection(@"Data Source= 
       (localdb)\Projects;Initial Catalog=FLS_DB;Integrated 
       Security=True; 
       Connect Timeout=30;Encrypt=False;"); 
       con.Open(); 
       SqlCommand cmd = new SqlCommand("Update Calls set 
        Service [email protected]", con); 
       cmd.CommandType = CommandType.Text; 
       cmd.Parameters.AddWithValue("@Service", Complete); 
       con.Open(); 
       int rowsAffected = cmd.ExecuteNonQuery(); 
       con.Close(); 
      } 
     } 
    } 
} 

Любая помощь будет высоко оценена!

+0

Спасибо за Ваш комментарий, для каждого состояния в списке, необходимо обновить Услугу в соответствующих случаях, т.е. если Bend затем обновить до 4 или если полное обновления 6 –

ответ

0

В коде отсутствует инструкция WHERE для обновления только записей, соответствующих условиям i == 3 или i == 5, поэтому вам не нужен цикл.

Вы просто устанавливает столбец Service на новые значения Bend и Complete для всех записей, которые содержат значение 3 или 5 в колонке службы

using(SqlConnection con = new SqlConnection(....)) 
using(SqlCommand cmd = con.CreateCommand()) 
{ 
    con.Open(); 
    // Sets to 4 all records with 3 
    cmd.CommandText = "Update Calls set [email protected] WHERE Service=3" 
    cmd.Parameters.AddWithValue("@Service", Bend); 
    int rowsUpdatedToBend = cmd.ExecuteNonQuery(); 

    // No need to recreate the command, just change the commandtext and 
    // the value of the parameter @service 
    cmd.CommandText = "Update Calls set [email protected] WHERE Service=5" 
    cmd.Parameters["@Service"].Value = Complete 
    rowsUpdatedToComplete = cmd.ExecuteNonQuery(); 

    MessageBox.Show("You have changed " + rowsUpdatedToBend + " rows to Bend state\r\n" + 
        "You have changed " + rowsUpdatedToComplete + " rows to Complete state"); 
} 
+0

Как отобразить сообщение для отображения изменений успешно? –

+0

Просто отображает значение возвращаемого ExecuteNonQuery. Это значение - количество строк, измененных вашим предыдущим запросом. – Steve

+0

Спасибо Стив. Я использую консольное приложение! Можно ли использовать ShowBox? как вы думаете, я должен соблюдать условия? Извините, я новичок на C# и все еще изучаю :( –

0
  1. правильно ли строка подключения?
  2. Вы открываете соединение дважды, если условие
  3. Поставьте точку останова и проверить, где программа будет

Предполагая, что первая точка является правильным; Вы могли бы попробовать что-то вроде этого (кода отредактированного):

string commandText = "UPDATE Calls SET Service=Service + 1 WHERE Service = 3 OR Service = 5;"; 
string connectionString = @"Data Source= 
      (localdb)\Projects;Initial Catalog=FLS_DB;Integrated 
      Security=True;Connect Timeout=30;Encrypt=False;"; 

    using (SqlConnection connection = new SqlConnection(connectionString)) 
    {    
     SqlCommand command = new SqlCommand(commandText, connection);    

     try 
     { 
      connection.Open(); 
      int rowsAffected = command.ExecuteNonQuery(); 
      Console.WriteLine("RowsAffected: {0}", rowsAffected); 
     } 
     catch (Exception ex) 
     { 
      Console.WriteLine(ex.Message); 
     } 
    } 
+0

1. Строка подключения работает. 2. Я заметил открытие соединение дважды для каждого случая. 3. Как я могу проверить свой код? Я имею в виду, как проверить код выше? Извините, я только новичок в C# –

+0

Я отлаживал программу, она попадает в цикл foreach, а затем пропускает все коды в b чтобы выйти из программы! –

+0

Вы уверены, что ваш список статуса имеет ожидаемые значения? Btw, ответ ниже от Стива имеет хорошую точку для предложения where. Вам действительно нужно петли? – Azureous

Смежные вопросы