2015-04-10 4 views
0

Мой код должен просто обновить одну конкретную строку в таблице. Я использовал простую процедуру для обновления записи в текущем приложении, и она работает без каких-либо проблем, кроме этого случая. Каждый раз, когда выполняется запрос, он фактически вставляет новую строку вместо того, чтобы просто обновляя существующий:Оператор обновления вставляет новую строку вместо обновления

Так вот мой C# код:

 try 
     { 
      command.Parameters.Clear(); 
      command.Parameters.AddRange(vars); 
      command.CommandText = "Update" + tableName; 

      conn.Open(); 
      command.ExecuteNonQuery(); 
      conn.Close(); 

      this.GetData(tableName); 
     } 
     catch 
     { 
      throw; 
     } 

А вот мой SQL-код (пожалуйста Игнорировать регистр «Alter Процедура» заявление, я просто хотел, чтобы получить базовый сценарий процедуры):

ALTER procedure [dbo].[UpdateExpenditureItems] 
    (@ID int, 
    @Name nvarchar(50), 
    @IsGroup bit, 
    @Parent nvarchar(50), 
    @Description nvarchar(50) 
    ) 

    AS 

    Begin 

--a new inserted row seems to be a result of running IF statement rather than ELSE 
    if @Parent != null 
     begin 
     declare @ParentID int 

     set @ParentID = (select ID from ExpenditureItems where [email protected]); 

     UPDATE ExpenditureItems SET Name [email protected], Parent [email protected], [Description] [email protected], IsGroup = @IsGroup WHERE [email protected]; 

     end 
    else 
     begin 
     UPDATE ExpenditureItems SET Name [email protected], [Description] [email protected] WHERE [email protected] 
     end 
    end 

Я не могу отправить скриншот из-за предела репутации ... Спасибо заранее.

ответ

0

Причина заключалась в том, что текущая форма была унаследована от другого, и когда я нажал на кнопку OK , сначала было нажато событие щелчка кнопки базового класса, а потом - дочернего.

Решение: либо в конечном итоге с запущенным базовым классом нажмите кнопку click, либо используйте virtual и override, чтобы переопределить метод базового класса.

1
@Parent != null 

Это не то, как вы проверить нуль в SQL

Изменить это:

@Parent is not null 
+0

Да, я изменил это, но это не решает мою проблему. Все еще не работает ... –

+0

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

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