我与旧的Oracle数据库的工作,我觉得有可能是一个更好的方式去从数据库中拆箱检索到的值。

目前,我有一个静态类充满不同类型特定的方法:

public static int? Int(object o)
{
    try
    {
        return (int?)Convert.ToInt32(o);
    }
    catch (Exception)
    {
        return null;
    }
}

..等不同的类型,但我觉得应该有一个更好的办法?如果我要拆箱的值,我沿着...

东西线

int i;
i = nvl.Int(dataRow["column"]); //In this instance, "column" is of a numeric database type

我想过使用一个通用类来处理各种不同类型的,但我不能真正弄明白去了解的最佳途径。

任何想法?

有帮助吗?

解决方案

我找到辅助方法如在方案以下有用的 - 测试对于DBNull的比捕获异常如在例如更高效的:

public static MyHelper
{
    public static Nullable<T> ToNullable<T>(object value) where T : struct
    {
        if (value == null) return null;
        if (Convert.IsDBNull(value)) return null;
        return (T) value;
    }

    public static string ToString(object value)
    {
        if (value == null) return null;
        if (Convert.IsDBNull(value)) return null;
        return (string)value;
    }
}

这适用于该字符串和你会遇到的通常原始值类型(int,小数,双,布尔,日期时间)。

这是从你的例子稍有不同,它蒙上而不是皈依 - 但我个人更喜欢这个。即如果数据库列是NUMERIC(十进制),我宁愿是明确的,如果我想为int的值,e.g转换:

int? myIntValue = (int?) MyHelper.ToNullable<decimal>(reader["MyNumericColumn"]);

其他提示

您可能引入它们之间简单的模型类和地图。

例如:

public class Customer
{
   public Customer(DataRow row) 
   {
      Name = row["Name"];
   }
   public Name { get; private set; }
}

当然,以减少重复的代码,你可以为你的模型类创建一个基类。

根据你想花,你可以去使用ORM映射NHibernate的努力。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top