簡體   English   中英

C#ADO.NET-返回表中一列的和

[英]C# ADO.NET - return sum of one columns in table

在我的數據庫表中,我有一列名為“ Cena”的整數類型。 我需要對這些列求和,以計算表的整個“ Cena”。

為此,我使用SqlCommand和方法ExecuteScalar()。

string sqlString = string.Format("Select Sum(Cena) From Ksiazki");
int returnValue ;

SqlCommand sqlComm = new SqlCommand();
sqlComm.CommandText = sqlString;
sqlComm.Connection = sqlConn;

returnValue = (int)sqlComm.ExecuteScalar();

只要我在表中有任何記錄,它就可以正常工作,但是當數據庫中的表為空時,它會崩潰。

老實說,我不知道為什么會這樣,所以如果有人可以告訴我表為空又為什么不返回0的話,我會非常感激。

表為空時,您的SQL查詢返回NULL。 您不能將此返回值強制轉換為int ,這就是C#引發錯誤的原因。

如果使用的是SQL Server,則可以檢查NULL並在數據庫中將其替換為0。

Select Isnull(Sum(Cena), 0) From Ksiazki

您還可以使用Coalesce ,它是Isnull的更通用形式(實際上是SQL標准的一部分)。

Select Coalesce(Sum(Cena), 0) From Ksiazki

因為空結果集上的sum將返回null

一個int不能為null (並且您將結果轉換為一個int)

如果您從SUM獲得null ,則coalesce運算符將返回0

在代碼的最后一行

returnValue = (int)sqlComm.ExecuteScalar();

是罪魁禍首,您正在嘗試將null解析為int。 這就是為什么您的代碼引發異常的原因。 在解析為之前,應檢查object是否為null。 您可以使用try and catch來防止不必要的錯誤。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM