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