1

データベースの列に のような数値が含まれている場合、0.11212121212121356500008888888888874343468766DataRow の生成された Decimal 型の列に収まりません。これは DataReader にも当てはまります。DataReader を使用して、ラッパーでこれを解決しました。

public class OracleDataReaderWrapper : DbDataReader
{
   DbDataReader _realReader;

    public OracleDataReaderWrapper(DbDataReader realReader)
    {
       _realReader = realReader;
    }

//... all other methods

    public override object GetValue(int ordinal)
    {
        if (_realReader is System.Data.OracleClient.OracleDataReader)
        {
            Type fieldType = _realReader.GetFieldType(ordinal);
            if (fieldType == typeof(Decimal))
            {
                return (decimal)((double)((System.Data.OracleClient.OracleNumber)_realReader.GetProviderSpecificValue(ordinal)));
            }
//...

しかし、DataSet、DbDataAdapter で何かを行うにはどうすればよいでしょうか? ROUND または TRUNC を使用してすべての datadapter-Select コマンドを書き換えるのは、間違っているだけでなく、それを変更する場所が既に何百もあるため、論外です。

注 これは ODP.NET にも適用されます。タイプは OracleNumber ではなく OracleDecimal です。私のラッパーは両方のクライアントに使用されます。

4

1 に答える 1