[踩坑記錄] ASP.NET Core System.Data.SqlTypes.SqlNullValueException: 資料為空。不能對空值呼叫此方法
阿新 • • 發佈:2021-01-30
技術標籤:成長記錄筆記.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, 就無法呼叫包含具體型別的方法, 因為它們內部涉及到型別轉換.