1. 程式人生 > 其它 >[踩坑記錄] ASP.NET Core System.Data.SqlTypes.SqlNullValueException: 資料為空。不能對空值呼叫此方法

[踩坑記錄] ASP.NET Core System.Data.SqlTypes.SqlNullValueException: 資料為空。不能對空值呼叫此方法

技術標籤:成長記錄筆記.NETmysqlsqlc#asp.net

問題是出在這裡的:

SoftwareInfo result = new SoftwareInfo(
reader.GetString(1),              // reader 是 MySqlDataReader 例項
reader.GetString(7))
{
    ID = reader.GetInt32(0),
    Label = reader.GetString(2),
    Coder = reader.GetString(3),
    DownloadCount = reader.GetInt32
(4), Stars = reader.GetFloat(5), Introduction = reader.GetString(6) }; return result;

解決方案:

第一種: 新增 Null 檢查, 在呼叫 GetString, GetInt32, GetFloat 這類包含具體的型別轉換的函式前, 先呼叫 IsDBNull 檢查這條資料是不是 Null.

SoftwareInfo currentInfo = new SoftwareInfo(
reader.GetString(1),
reader.GetString(7))
{
    ID = reader.
GetInt32(0), Label = reader.IsDBNull(2) ? null : reader.GetString(2), Coder = reader.IsDBNull(3) ? null : reader.GetString(3), DownloadCount = reader.IsDBNull(4) ? 0 : reader.GetInt32(4), Stars = reader.IsDBNull(5) ? 0 : reader.IsDBNull(5) ? 0 : reader.GetFloat(5), Introduction = reader.
IsDBNull(6) ? null : reader.GetString(6) }; return currentInfo;

第二種: 直接指定資料庫的欄位不可為 Null, 從根本上杜絕空值

alter table tablename modify columnname not null;

原因:

如果資料是 Null, 就無法呼叫包含具體型別的方法, 因為它們內部涉及到型別轉換.