Dot-Net

如何在僅執行一次命令時檢查 DBNull?

  • January 8, 2009

當我從數據庫中檢索任何標量值時,我通常會為可空欄位編寫這樣的程式碼。

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;

引用自:https://stackoverflow.com/questions/422932