转换从DB读取的值的方法

时间:2013-07-08 19:00:27

标签: c# sql-server database ado.net type-conversion

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

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

4 个答案:

答案 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>();