我正在嘗試使用此代碼從資料庫中獲取金額總和:
MySqlCommand cmdsumpayment = new MySqlCommand("SELECT sum(amount) as'total' from payments where unit_id = " UNITID " AND deleted_at IS NULL", conn);
MySqlDataReader rdr2 = cmdsumpayment.ExecuteReader();
if (rdr2.HasRows) {
while (rdr2.Read())
{
TOTALPAYMENTS = rdr2.GetInt32("total");
}
}
else
MessageBox.Show("nothing found");
它有效,我可以從付款表中獲取總和(金額),但我的問題是如果我搜索沒有付款的內容,我會收到此錯誤:
System.InvalidCastException: 'Specified cast is not valid.
例如,如果 unit id = 1 并且它確實有付款,我可以得到 TOTALPAYMENTS 的結果,但如果它沒有任何付款,我會收到錯誤并且應用程式崩潰。有人可以幫助我如何在不崩潰的情況下處理空搜索嗎?我也試過,if (rdr2.HasRows)但是不行,不知道為什么。
uj5u.com熱心網友回復:
我 100% 確定您amount在表中有空值,然后您在轉換為整數時進行型別轉換。使用您發布的代碼,如果表中沒有針對給定條件的行,您將不會收到型別轉換例外。所以你可以放置斷點和除錯或放置一些日志。您還可以嘗試直接在資料庫中運行查詢以查看它是否回傳記錄。
如果金額為空,您可以修改查詢。
SELECT sum(isnull(amount, 0)) as'total' from payments where unit_id = " UNITID " AND deleted_at IS NULL
我建議使用引數化查詢來避免 sql 注入。
編輯:我找到了您問題的根本原因。SqlDataReader.GetInt32需要整數值并且您正在傳遞字串值。所以你需要通過0而不是“total”. 如檔案中所述,您應該在呼叫此方法之前呼叫IsDBNull來檢查空值
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/367600.html
上一篇:帶有時間比較的SQL查詢
