![](/img/trans.png)
[英]Record and Table locking in C# WinForms with PostgreSql and 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.