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では、そのデータ型は数値ですが、MSSQLでは使用されるデータ型はsmallintです。

さて、私は次のようなことをすることでこの問題を「修正」することができました:

short id = Convert.ToInt16(data.GetValue(1));

これを行うためのより良いまたはよりエレガントな方法はありますか?

4

2 に答える 2

1

ORMがそのようなシナリオをどのように処理するのかわかりません。

ただし、そのようなフィールドには、両方(すべて)のケースに対応できるタイプを使用する必要があります。この表
を調べたところ、 10進数が使用できる適切な.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 に答える