题
我与旧的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的努力。
不隶属于 StackOverflow