0

我时不时地发现我的 ADO.NET 代码由于从数据库读取的值为 null 并且无法转换为其他数据类型而崩溃。我发现很难找到从数据库中转换这些读取值的正确方法。我知道这些进行空值检查的方法,但想知道哪种方法更有效?

  1. 我经常isnull()在 DB 中使用该方法(在我的情况下是 SQL Server)
  2. 我使用 将读取的值转换为字符串.ToString(),然后使用该string.IsNullOrWhiteSpace()方法检查它是否为空或以其他方式将其转换为所需的数据类型。
4

4 回答 4

2

只需使用Nullable Types即可在您的应用程序中使用这些数据,而无需进行任何类型转换。

于 2013-07-08T19:04:49.287 回答
1

用新的??操作员:

var foo = dataset.tables[0].foo ?? 0;
于 2013-07-08T19:09:02.817 回答
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>();
于 2013-07-08T19:17:15.073 回答
1

您还可以检查 DBNull.Value。或者当您获得值时使用 TryParse 进行转换。然后,如果它为空,它不会伤害任何东西。

于 2013-07-08T19:06:11.273 回答