我偶爾發現自己的ADO.NET代碼崩潰,原因是從數據庫讀取的值爲空,無法轉換爲其他數據類型。我發現很難找到一個正確的方式來從數據庫中轉換這些讀取值。我知道這些做空檢查的方法,但想知道哪一個更有效率?轉換從數據庫讀取的值的方法
- 我經常使用DB的
isnull()
方法(對我來說這是SQL服務器) - 我使用
.ToString()
,然後使用string.IsNullOrWhiteSpace()
方法來檢查它是否爲空或以其他方式轉換轉換讀值轉換爲字符串它到所需的數據類型。
我偶爾發現自己的ADO.NET代碼崩潰,原因是從數據庫讀取的值爲空,無法轉換爲其他數據類型。我發現很難找到一個正確的方式來從數據庫中轉換這些讀取值。我知道這些做空檢查的方法,但想知道哪一個更有效率?轉換從數據庫讀取的值的方法
isnull()
方法(對我來說這是SQL服務器).ToString()
,然後使用string.IsNullOrWhiteSpace()
方法來檢查它是否爲空或以其他方式轉換轉換讀值轉換爲字符串它到所需的數據類型。只需使用Nullable Types即可在應用程序中使用這些數據,而無需任何類型轉換。
您也可以檢查DBNull.Value。或者當您使用TryParse將值轉換時。那麼如果它是空的,它不會傷害任何東西。
你可以考慮寫一些擴展方法,採取的痛苦出來。
首先,你需要的東西爲可空類型,e.g:
public static partial class ShortExtensionMethods
{
public static short SafeValue(this short? self)
{
return self == null ? 0 : self.Value;
}
}
重複其他基本類型。現在,你在你的問題提的是,你想要做一些轉換......時間的另一個通用擴展方法:
public static partial class IConvertibleExtensionMethods
{
public static T To<T>(this IConvertible self)
{
return (T)Convert.ChangeType(self, typeof(T));
} // eo To<T>
} // eo class IConvertibleExtensionMethods
現在,您可以安全地讀你可空類型:
short? field;
// later
short result = field.SafeValue();
int converted = field.SafeValue().To<int>();
好謝謝對於你的答案,但我恐怕你不能將空值類型轉換爲其他數據類型爲double,float,int等。因爲有時我需要應用一些業務邏輯來讀取數據,並且這種情況下數據必須被轉換。 。 –
@ khalidkhan:不,數據不必轉換。這實際上是一種使用可空類型的場景。您可能會發現[Value property](http://msdn.microsoft.com/zh-cn/library/ydkbatt6.aspx)和[GetValueOrDefault method](http:/ /msdn.microsoft.com/en-us/library/72cec0e0.aspx)有用。 – lightbricko