SqlCommand SUM(NVL()) issue



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

感谢您阅读本文。

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

当没有找到"付款"列的记录时,这应该起作用

不,它只会将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,而不是串联字符串,但这是一个单独的问题。

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

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

最新更新