SqlCommand SUM(NVL())问题

时间:2013-09-04 17:42:15

标签: c# sql sql-server winforms

你好我正在尝试选择所有付款的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”。

感谢您阅读本文。

3 个答案:

答案 0 :(得分:1)

NVL()是特定于oracle的函数。您可以使用ANSI COALSECE函数执行相同的任务。 COALESCE的好处是它需要两个以上的参数,并选择第一个非空值。

答案 1 :(得分:0)

在SQL Server中,有一个名为ISNULL的函数用于此目的。请在下面找到查询:

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

答案 2 :(得分:0)

  

当没有找到“付款”列

的记录时,这应该有效

不,它只会将payments列中的NULL值视为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();

您还应该考虑使用SqlParameter而不是连接字符串,但这是一个单独的问题。