2013-09-04 3 views
-2

Здравствуйте, я пытаюсь выбрать сумму всех платежей, но получил это исключение: NVL не признанное имя функцииSqlCommand SUM (NVL)() вопрос

с этим кодом:

  SqlCommand sc2 = new SqlCommand("SELECT SUM(NVL(payments,0)) AS sumcastka FROM kliplat WHERE akce=" + zakce.Text, spojeni); 

      spojeni.Open(); 

      int sumOfPrice = 0; 
      object vysledek2 = sc2.ExecuteScalar(); 
      if (vysledek2 != DBNull.Value) 
       sumOfPrice = Convert.ToInt32(vysledek2); 
      // int vysledek2 = Convert.ToInt32(sc2.ExecuteScalar()); 

      spojeni.Close(); 

Это должен работать так, как если бы не были найдены записи для столбцов «платежи», я хотел бы получить «0», если это возможно.

Благодарим вас за это.

ответ

0

Это должно работать, если записи не найдены для колонки «платежей»

Нет, это будет только лечить NULL значения в payments колонке как 0.

Если записи не найдены , то ExecuteScalar возвращает null (не DBNull):

SqlCommand sc2 = new SqlCommand("SELECT SUM(ISNULL(payments,0)) AS sumcastka FROM kliplat WHERE akce=" + zakce.Text, spojeni); 

spojeni.Open(); 

int sumOfPrice = 0; 
object vysledek2 = sc2.ExecuteScalar(); 
if (vysledek2 != null && vysledek2 != DBNull.Value) 
    sumOfPrice = Convert.ToInt32(vysledek2); 

spojeni.Close(); 

Вы должны также л ook в использование SqlParameter s вместо конкатенации строк, но это отдельная проблема.

0

В SQL-сервере для этой цели существует функция, называемая ISNULL. Пожалуйста, найдите запрос ниже:

SELECT SUM(ISNULL(payments,0)) AS sumcastka FROM kliplat WHERE akce=" + zakce.Text, spojeni 
+0

Привет, если это возвращение ISNULL, только если некоторые из записей NULL. Будет ли это работать, даже если записи не найдены? Еще раз спасибо. – Marek

+0

Вы имеете в виду, когда столбец «Платеж» пуст для этой строки? – Sonam

+0

Nono, я имею в виду, когда не было выбрано никаких записей. Если вы понимаете, о чем я. – Marek

1

NVL() является функция оракула специфичны. Вы можете использовать функцию ANSI COALSECE для выполнения той же задачи. Преимущество COALESCE состоит в том, что он принимает более двух параметров и выбирает первое ненулевое значение.