Dot-Net
如何在僅執行一次命令時檢查 DBNull?
當我從數據庫中檢索任何標量值時,我通常會為可空欄位編寫這樣的程式碼。
cmd.ExecuteScalar() == DBNull.Value ? 0 : (int)cmd.ExecuteScalar()但我不喜歡它,因為它執行 Executescalar 語句兩次。對於我的網站來說,這是一次額外的伺服器之旅,為了提高性能,我不想這樣做。
有什麼辦法可以擺脫這個額外的 ExecuteScalar() 嗎?
給自己寫一個 sql 命令的擴展方法。
public static T ExecuteNullableScalar<T>(this SqlCommand cmd) where T : struct { var result = cmd.ExecuteScalar(); if (result == DBNull.Value) return default(T); return (T)result; }用法變為:
int value = cmd.ExecuteNullableScalar<int>();
只需使用一個變數來記憶體結果:
var o = cmd.ExecuteScalar(); return o == DBNull.Value ? 0 : (int)o;