0

私はSQLServer2005データベースを使用してac#アプリケーションに取り組んでいます。ベースからの値が10進数なのか、bigintなのかわからないまま、データベースからデータリーダーに渡された値を10進数に変換する最良の方法は何ですか?

        if (dataReader.IsDBNull(0) == false) {
            PLAYER.PLAYER_ID = dataReader.GetDecimal(0);
        }

私のPLAYERオブジェクトでは、PLAYER_IDは10進型です。

私は2つの異なるデータベースを使用しているため、ベースから取得される値はbigintまたはdecimalにすることができます。これが10進数の場合は問題ありませんが、bigintの場合は、エラーが発生します。

4

3 に答える 3

2

GetFieldTypeメソッドを使用して、オブジェクトのデータ型を判別できるはずです。

于 2012-09-26T17:34:17.697 に答える
1

GetFieldTypeを使用してタイプを判別できます

http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqldatareader.getfieldtype.aspx

Type type = dataReader.GetFieldType(0);

次に、適切なリーダーメソッドを使用してデータを読み取ることができます。

おそらく、すべての行に対してGetFieldTypeを呼び出さないようにする必要があります。行の読み取りを開始する前にこれを呼び出し、この特定のクエリが返したタイプを示すフラグを設定します。

于 2012-09-26T17:35:11.687 に答える
0

使用Decimal.TryParse

decimal tempID;

Decimal.TryParse(dataReader[0], out tempID);
PLAYER.PLAYER_ID = tempID;

nullでない限り、値を10進数に変換する必要があります。nullの場合、小数は0のままになります。

于 2012-09-26T17:34:46.083 に答える