2013-10-10 3 views
0

Я не знаю, почему следующий запрос не выполняется с моими ожидаемыми параметрами!Почему мой запрос не обновляет таблицу с моими входными параметрами?

cmdTxt.Append("UPDATE sd32depart SET currentcredit = currentcredit + ? WHERE year = ? AND main_code = ? "); 
paramList.Add("currentcredit", value.ToString().TrimEnd()); 
paramList.Add("year", year.ToString().TrimEnd()); 
paramList.Add("main_code", main_code.ToString().TrimEnd()); 
res = ConnectionObj.Execute_NonQueryWithTransaction(cmdTxt.ToString(), CommandType.Text, paramList); 

я

res = 1 и хотя currentcredit = 180 в качестве параметра

, когда я проверить мой стол я нашел currentcredit NULL !!


public int Execute_NonQueryWithTransaction(string cmdText) 
      { 
       string return_msg = ""; 
       int return_val = -1; 
       //check if connection closed then return -1; 
       if (connectionstate == ConnectionState.Closed) 
        return -1; 
       command.CommandText = cmdText; 
       command.CommandType = CommandType.Text; 
       command.Transaction = current_trans; 
       try 
       { 
        return_val = command.ExecuteNonQuery(); 
       } 
       catch (IfxException ifxEx)// Handle IBM.data.informix : mostly catched 
       { 
        return_val = ifxEx.Errors[0].NativeError; 
        return_msg = return_val.ToString(); 
       } 
       catch (Exception ex)// Handle all other exceptions. 
       { 
        return_msg = ex.Message; 
       } 
       finally 
       { 
        if (!string.IsNullOrEmpty(return_msg))//catch error 
        { 
         //rollback 
         current_trans.Rollback(); 
         Close_Connection(); 
        } 

       } 
       return return_val; 
      } 
+0

Вы можете добавить Declarations ваших объектов – CharlesAD

+0

Вы делаете обновление, так что я угадайте, что вы получили количество строк, затронутых – Robert

+0

Да, я получаю '1', но' currentcredit NULL', хотя я передаю его '180' –

ответ

1

Из комментариев:

currentcredit является недействительным перед обновлением, что я должен делать

Ах, вот в чем проблема тогда. В SQL, null липкий. null + все есть: null. Если бы это было TSQL (т.е. SQL-сервер), решение будет ISNULL:

UPDATE sd32depart SET currentcredit = ISNULL(currentcredit,0) + ? 

где результат ISNULL(x, y) является x, если x не равен нулю, в противном случае y. В терминах C# это эквивалент x ?? y (и действительно, ISNULL(x, y) идентичен COALESCE(x, y), за исключением того, что COALESCE является varadic).

Итак: найдите информационный эквивалент ISNULL или COALESCE и используйте это.

Из краткого поиска, кажется, что в Informix the NVL function это делает, так что попробуйте: (? CmdTxt, paramList и Рез)

UPDATE sd32depart SET currentcredit = NVL(currentcredit,0) + ? 
+0

@Mark Gravell, но не все время 'currentcredit имеет значение null перед обновлением', иногда он может иметь число –

+1

@just_name, что хорошо; 'NVL (currentcredit, 0) +?' Вернет существующее число, если оно есть. –

+0

Спасибо вам столько :) :) –

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

  • Нет связанных вопросов^_^