2

我有一个简单的值对象,我用来自 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));

有没有更好或更优雅的方法来做到这一点?

4

2 回答 2

1

我不知道 ORM 如何处理这种情况。

但是,对于此类字段,您应该使用可以同时适应两种(所有)情况的类型。
我查看了这张表,似乎十进制是您可以使用的合适的 .net 数据类型。

于 2009-06-25T09:25:16.410 回答
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

:)

于 2012-11-12T08:52:18.027 回答