データベースの列に のような数値が含まれている場合、0.11212121212121356500008888888888874343468766
DataRow の生成された 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 です。私のラッパーは両方のクライアントに使用されます。