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