我不时发现我的ADO.NET代码崩溃是由于从数据库读取的值为null而无法转换为其他数据类型。我发现很难找到从数据库转换这些读取值的正确方法。我知道这些进行空检查的方法,但是想知道它们哪个更有效?
isnull()
方法(在我的情况下是SQL Server).ToString()
将读取值转换为字符串,然后使用string.IsNullOrWhiteSpace()
方法检查它是否为null或以其他方式将其转换为所需的数据类型。答案 0 :(得分:2)
只需使用Nullable Types即可在您的应用程序中使用这些数据,而无需进行任何类型转换。
答案 1 :(得分:1)
您还可以检查DBNull.Value。或者当你得到值时使用TryParse来转换它。然后,如果它为空,它不会伤害任何东西。
答案 2 :(得分:1)
使用新的??运算符:
var foo = dataset.tables[0].foo ?? 0;
答案 3 :(得分:1)
您可以考虑编写一些扩展方法来消除它的痛苦。
首先,你需要一些可以为空的类型,例如:
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>();