我有一个简单的值对象,我用IDataReader中的数据填充(可能是查询到Oracle或MS SQL数据库的结果)。此对象的工厂方法如下所示:
internal static SomeClass CreateFromDataReader(IDataReader data)
{
string message = data.GetString(0);
short id = data.GetInt16(1);
DateTime dateStamp = data.GetDateTime(2);
return new SomeClass(message, id, dateStamp);
}
然后我遇到了一个问题,该问题与Oracle和MS SQL数据库用于该特定列的数据类型的差异有关:在Oracle中,数据类型是数字,而对于MS SQL,使用的数据类型是smallint。
现在,虽然我可以通过执行以下操作来“修复”此问题:
short id = Convert.ToInt16(data.GetValue(1));
有更好或更优雅的方式吗?
答案 0 :(得分:1)
我不知道ORM如何处理这种情况。
但是,你应该使用一种能够适应这种场的两种(所有)情况的类型 我查看了this table&似乎decimal是你可以使用的合适的.net数据类型。
答案 1 :(得分:0)
你的想法是正确的。也许更短:
short id = Convert.ToInt16(data[1]); //8 characters less
或制作扩展方法。
public static short ToShort(this IDataReader r, int index)
{
return Convert.ToInt16(r[index]);
}
现在你可以:
short id = data.ToShort(1); //18 characters less
:)