-2

您好,我正在尝试选择所有付款的总和,但出现此异常: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”。

谢谢您阅读此篇。

4

3 回答 3

1

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

于 2013-09-04T17:49:25.270 回答
0

这应该在没有找到“付款”列的记录时起作用

不,它只会将payments列中的 NULL 值视为 0。

如果没有找到记录,则ExecuteScalar返回null(not 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();

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

于 2013-09-04T17:54:44.593 回答
0

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

SELECT SUM(ISNULL(payments,0)) AS sumcastka FROM kliplat WHERE akce=" + zakce.Text, spojeni
于 2013-09-04T17:43:20.793 回答