762 lines
		
	
	
		
			21 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			762 lines
		
	
	
		
			21 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
| using System;
 | |
| using System.Data;
 | |
| 
 | |
| namespace Csla.Data
 | |
| {
 | |
|   /// <summary>
 | |
|   /// This is a DataReader that 'fixes' any null values before
 | |
|   /// they are returned to our business code.
 | |
|   /// </summary>
 | |
|   public class SafeDataReader : IDataReader
 | |
|   {
 | |
|     private IDataReader _dataReader;
 | |
| 
 | |
|     /// <summary>
 | |
|     /// Get a reference to the underlying data reader
 | |
|     /// object that actually contains the data from
 | |
|     /// the data source.
 | |
|     /// </summary>
 | |
|     protected IDataReader DataReader
 | |
|     {
 | |
|       get { return _dataReader; }
 | |
|     }
 | |
| 
 | |
|     /// <summary>
 | |
|     /// Initializes the SafeDataReader object to use data from
 | |
|     /// the provided DataReader object.
 | |
|     /// </summary>
 | |
|     /// <param name="dataReader">The source DataReader object containing the data.</param>
 | |
|     public SafeDataReader(IDataReader dataReader)
 | |
|     {
 | |
|       _dataReader = dataReader;
 | |
|     }
 | |
| 
 | |
|     /// <summary>
 | |
|     /// Gets a string value from the datareader.
 | |
|     /// </summary>
 | |
|     /// <remarks>
 | |
|     /// Returns empty string for null.
 | |
|     /// </remarks>
 | |
|     /// <param name="name">Name of the column containing the value.</param>
 | |
|     public string GetString(string name)
 | |
|     {
 | |
|       return GetString(_dataReader.GetOrdinal(name));
 | |
|     }
 | |
| 
 | |
|     /// <summary>
 | |
|     /// Gets a string value from the datareader.
 | |
|     /// </summary>
 | |
|     /// <remarks>
 | |
|     /// Returns empty string for null.
 | |
|     /// </remarks>
 | |
|     /// <param name="i">Ordinal column position of the value.</param>
 | |
|     public virtual string GetString(int i)
 | |
|     {
 | |
|       if (_dataReader.IsDBNull(i))
 | |
|         return string.Empty;
 | |
|       else
 | |
|         return _dataReader.GetString(i);
 | |
|     }
 | |
| 
 | |
| 
 | |
|     /// <summary>
 | |
|     /// Gets a value of type <see cref="System.Object" /> from the datareader.
 | |
|     /// </summary>
 | |
|     /// <param name="name">Name of the column containing the value.</param>
 | |
|     public object GetValue(string name)
 | |
|     {
 | |
|       return GetValue(_dataReader.GetOrdinal(name));
 | |
|     }
 | |
| 
 | |
|     /// <summary>
 | |
|     /// Gets a value of type <see cref="System.Object" /> from the datareader.
 | |
|     /// </summary>
 | |
|     /// <param name="i">Ordinal column position of the value.</param>
 | |
|     public virtual object GetValue(int i)
 | |
|     {
 | |
|       if (_dataReader.IsDBNull(i))
 | |
|         return null;
 | |
|       else
 | |
|         return _dataReader.GetValue(i);
 | |
|     }
 | |
| 
 | |
|     /// <summary>
 | |
|     /// Gets an integer from the datareader.
 | |
|     /// </summary>
 | |
|     /// <remarks>
 | |
|     /// Returns 0 for null.
 | |
|     /// </remarks>
 | |
|     /// <param name="name">Name of the column containing the value.</param>
 | |
|     public int GetInt32(string name)
 | |
|     {
 | |
|       return GetInt32(_dataReader.GetOrdinal(name));
 | |
|     }
 | |
| 
 | |
|     /// <summary>
 | |
|     /// Gets an integer from the datareader.
 | |
|     /// </summary>
 | |
|     /// <remarks>
 | |
|     /// Returns 0 for null.
 | |
|     /// </remarks>
 | |
|     /// <param name="i">Ordinal column position of the value.</param>
 | |
|     public virtual int GetInt32(int i)
 | |
|     {
 | |
|       if (_dataReader.IsDBNull(i))
 | |
|         return 0;
 | |
|       else
 | |
|         return _dataReader.GetInt32(i);
 | |
|     }
 | |
| 
 | |
|     /// <summary>
 | |
|     /// Gets a double from the datareader.
 | |
|     /// </summary>
 | |
|     /// <remarks>
 | |
|     /// Returns 0 for null.
 | |
|     /// </remarks>
 | |
|     /// <param name="name">Name of the column containing the value.</param>
 | |
|     public double GetDouble(string name)
 | |
|     {
 | |
|       return GetDouble(_dataReader.GetOrdinal(name));
 | |
|     }
 | |
| 
 | |
|     /// <summary>
 | |
|     /// Gets a double from the datareader.
 | |
|     /// </summary>
 | |
|     /// <remarks>
 | |
|     /// Returns 0 for null.
 | |
|     /// </remarks>
 | |
|     /// <param name="i">Ordinal column position of the value.</param>
 | |
|     public virtual double GetDouble(int i)
 | |
|     {
 | |
|       if (_dataReader.IsDBNull(i))
 | |
|         return 0;
 | |
|       else
 | |
|         return _dataReader.GetDouble(i);
 | |
|     }
 | |
| 
 | |
|     /// <summary>
 | |
|     /// Gets a <see cref="SmartDate" /> from the datareader.
 | |
|     /// </summary>
 | |
|     /// <remarks>
 | |
|     /// A null is converted into min possible date
 | |
|     /// See Chapter 5 for more details on the SmartDate class.
 | |
|     /// </remarks>
 | |
|     /// <param name="name">Name of the column containing the value.</param>
 | |
|     public Csla.SmartDate GetSmartDate(string name)
 | |
|     {
 | |
|       return GetSmartDate(_dataReader.GetOrdinal(name), true);
 | |
|     }
 | |
| 
 | |
|     /// <summary>
 | |
|     /// Gets a <see cref="SmartDate" /> from the datareader.
 | |
|     /// </summary>
 | |
|     /// <remarks>
 | |
|     /// A null is converted into the min possible date
 | |
|     /// See Chapter 5 for more details on the SmartDate class.
 | |
|     /// </remarks>
 | |
|     /// <param name="i">Ordinal column position of the value.</param>
 | |
|     public virtual Csla.SmartDate GetSmartDate(int i)
 | |
|     {
 | |
|       return GetSmartDate(i, true);
 | |
|     }
 | |
| 
 | |
|     /// <summary>
 | |
|     /// Gets a <see cref="SmartDate" /> from the datareader.
 | |
|     /// </summary>
 | |
|     /// <remarks>
 | |
|     /// A null is converted into either the min or max possible date
 | |
|     /// depending on the MinIsEmpty parameter. See Chapter 5 for more
 | |
|     /// details on the SmartDate class.
 | |
|     /// </remarks>
 | |
|     /// <param name="name">Name of the column containing the value.</param>
 | |
|     /// <param name="minIsEmpty">
 | |
|     /// A flag indicating whether the min or max 
 | |
|     /// value of a data means an empty date.</param>
 | |
|     public Csla.SmartDate GetSmartDate(string name, bool minIsEmpty)
 | |
|     {
 | |
|       return GetSmartDate(_dataReader.GetOrdinal(name), minIsEmpty);
 | |
|     }
 | |
| 
 | |
|     /// <summary>
 | |
|     /// Gets a <see cref="SmartDate"/> from the datareader.
 | |
|     /// </summary>
 | |
|     /// <param name="i">Ordinal column position of the value.</param>
 | |
|     /// <param name="minIsEmpty">
 | |
|     /// A flag indicating whether the min or max 
 | |
|     /// value of a data means an empty date.</param>
 | |
|     public virtual Csla.SmartDate GetSmartDate(
 | |
|       int i, bool minIsEmpty)
 | |
|     {
 | |
|       if (_dataReader.IsDBNull(i))
 | |
|         return new Csla.SmartDate(minIsEmpty);
 | |
|       else
 | |
|         return new Csla.SmartDate(
 | |
|           _dataReader.GetDateTime(i), minIsEmpty);
 | |
|     }
 | |
| 
 | |
|     /// <summary>
 | |
|     /// Gets a Guid value from the datareader.
 | |
|     /// </summary>
 | |
|     /// <remarks>
 | |
|     /// Returns Guid.Empty for null.
 | |
|     /// </remarks>
 | |
|     /// <param name="name">Name of the column containing the value.</param>
 | |
|     public System.Guid GetGuid(string name)
 | |
|     {
 | |
|       return GetGuid(_dataReader.GetOrdinal(name));
 | |
|     }
 | |
| 
 | |
|     /// <summary>
 | |
|     /// Gets a Guid value from the datareader.
 | |
|     /// </summary>
 | |
|     /// <remarks>
 | |
|     /// Returns Guid.Empty for null.
 | |
|     /// </remarks>
 | |
|     /// <param name="i">Ordinal column position of the value.</param>
 | |
|     public virtual System.Guid GetGuid(int i)
 | |
|     {
 | |
|       if (_dataReader.IsDBNull(i))
 | |
|         return Guid.Empty;
 | |
|       else
 | |
|         return _dataReader.GetGuid(i);
 | |
|     }
 | |
| 
 | |
|     /// <summary>
 | |
|     /// Reads the next row of data from the datareader.
 | |
|     /// </summary>
 | |
|     public bool Read()
 | |
|     {
 | |
|       return _dataReader.Read();
 | |
|     }
 | |
| 
 | |
|     /// <summary>
 | |
|     /// Moves to the next result set in the datareader.
 | |
|     /// </summary>
 | |
|     public bool NextResult()
 | |
|     {
 | |
|       return _dataReader.NextResult();
 | |
|     }
 | |
| 
 | |
|     /// <summary>
 | |
|     /// Closes the datareader.
 | |
|     /// </summary>
 | |
|     public void Close()
 | |
|     {
 | |
|       _dataReader.Close();
 | |
|     }
 | |
| 
 | |
|     /// <summary>
 | |
|     /// Returns the depth property value from the datareader.
 | |
|     /// </summary>
 | |
|     public int Depth
 | |
|     {
 | |
|       get
 | |
|       {
 | |
|         return _dataReader.Depth;
 | |
|       }
 | |
|     }
 | |
| 
 | |
|     /// <summary>
 | |
|     /// Returns the FieldCount property from the datareader.
 | |
|     /// </summary>
 | |
|     public int FieldCount
 | |
|     {
 | |
|       get
 | |
|       {
 | |
|         return _dataReader.FieldCount;
 | |
|       }
 | |
|     }
 | |
| 
 | |
|     /// <summary>
 | |
|     /// Gets a boolean value from the datareader.
 | |
|     /// </summary>
 | |
|     /// <remarks>
 | |
|     /// Returns <see langword="false" /> for null.
 | |
|     /// </remarks>
 | |
|     /// <param name="name">Name of the column containing the value.</param>
 | |
|     public bool GetBoolean(string name)
 | |
|     {
 | |
|       return GetBoolean(_dataReader.GetOrdinal(name));
 | |
|     }
 | |
| 
 | |
|     /// <summary>
 | |
|     /// Gets a boolean value from the datareader.
 | |
|     /// </summary>
 | |
|     /// <remarks>
 | |
|     /// Returns <see langword="false" /> for null.
 | |
|     /// </remarks>
 | |
|     /// <param name="i">Ordinal column position of the value.</param>
 | |
|     public virtual bool GetBoolean(int i)
 | |
|     {
 | |
|       if (_dataReader.IsDBNull(i))
 | |
|         return false;
 | |
|       else
 | |
|         return _dataReader.GetBoolean(i);
 | |
|     }
 | |
| 
 | |
|     /// <summary>
 | |
|     /// Gets a byte value from the datareader.
 | |
|     /// </summary>
 | |
|     /// <remarks>
 | |
|     /// Returns 0 for null.
 | |
|     /// </remarks>
 | |
|     /// <param name="name">Name of the column containing the value.</param>
 | |
|     public byte GetByte(string name)
 | |
|     {
 | |
|       return GetByte(_dataReader.GetOrdinal(name));
 | |
|     }
 | |
| 
 | |
|     /// <summary>
 | |
|     /// Gets a byte value from the datareader.
 | |
|     /// </summary>
 | |
|     /// <remarks>
 | |
|     /// Returns 0 for null.
 | |
|     /// </remarks>
 | |
|     /// <param name="i">Ordinal column position of the value.</param>
 | |
|     public virtual byte GetByte(int i)
 | |
|     {
 | |
|       if (_dataReader.IsDBNull(i))
 | |
|         return 0;
 | |
|       else
 | |
|         return _dataReader.GetByte(i);
 | |
|     }
 | |
| 
 | |
|     /// <summary>
 | |
|     /// Invokes the GetBytes method of the underlying datareader.
 | |
|     /// </summary>
 | |
|     /// <remarks>
 | |
|     /// Returns 0 for null.
 | |
|     /// </remarks>
 | |
|     /// <param name="name">Name of the column containing the value.</param>
 | |
|     /// <param name="buffer">Array containing the data.</param>
 | |
|     /// <param name="bufferOffset">Offset position within the buffer.</param>
 | |
|     /// <param name="fieldOffset">Offset position within the field.</param>
 | |
|     /// <param name="length">Length of data to read.</param>
 | |
|     public Int64 GetBytes(string name, Int64 fieldOffset,
 | |
|       byte[] buffer, int bufferOffset, int length)
 | |
|     {
 | |
|       return GetBytes(_dataReader.GetOrdinal(name), fieldOffset, buffer, bufferOffset, length);
 | |
|     }
 | |
| 
 | |
|     /// <summary>
 | |
|     /// Invokes the GetBytes method of the underlying datareader.
 | |
|     /// </summary>
 | |
|     /// <remarks>
 | |
|     /// Returns 0 for null.
 | |
|     /// </remarks>
 | |
|     /// <param name="i">Ordinal column position of the value.</param>
 | |
|     /// <param name="buffer">Array containing the data.</param>
 | |
|     /// <param name="bufferOffset">Offset position within the buffer.</param>
 | |
|     /// <param name="fieldOffset">Offset position within the field.</param>
 | |
|     /// <param name="length">Length of data to read.</param>
 | |
|     public virtual Int64 GetBytes(int i, Int64 fieldOffset,
 | |
|       byte[] buffer, int bufferOffset, int length)
 | |
|     {
 | |
|       if (_dataReader.IsDBNull(i))
 | |
|         return 0;
 | |
|       else
 | |
|         return _dataReader.GetBytes(i, fieldOffset, buffer, bufferOffset, length);
 | |
|     }
 | |
| 
 | |
|     /// <summary>
 | |
|     /// Gets a char value from the datareader.
 | |
|     /// </summary>
 | |
|     /// <remarks>
 | |
|     /// Returns Char.MinValue for null.
 | |
|     /// </remarks>
 | |
|     /// <param name="name">Name of the column containing the value.</param>
 | |
|     public char GetChar(string name)
 | |
|     {
 | |
|       return GetChar(_dataReader.GetOrdinal(name));
 | |
|     }
 | |
| 
 | |
|     /// <summary>
 | |
|     /// Gets a char value from the datareader.
 | |
|     /// </summary>
 | |
|     /// <remarks>
 | |
|     /// Returns Char.MinValue for null.
 | |
|     /// </remarks>
 | |
|     /// <param name="i">Ordinal column position of the value.</param>
 | |
|     public virtual char GetChar(int i)
 | |
|     {
 | |
|       if (_dataReader.IsDBNull(i))
 | |
|         return char.MinValue;
 | |
|       else
 | |
|       {
 | |
|         char[] myChar = new char[1];
 | |
|         _dataReader.GetChars(i, 0, myChar, 0, 1);
 | |
|         return myChar[0];
 | |
|       }
 | |
|     }
 | |
| 
 | |
|     /// <summary>
 | |
|     /// Invokes the GetChars method of the underlying datareader.
 | |
|     /// </summary>
 | |
|     /// <remarks>
 | |
|     /// Returns 0 for null.
 | |
|     /// </remarks>
 | |
|     /// <param name="name">Name of the column containing the value.</param>
 | |
|     /// <param name="buffer">Array containing the data.</param>
 | |
|     /// <param name="bufferOffset">Offset position within the buffer.</param>
 | |
|     /// <param name="fieldOffset">Offset position within the field.</param>
 | |
|     /// <param name="length">Length of data to read.</param>
 | |
|     public Int64 GetChars(string name, Int64 fieldOffset,
 | |
|       char[] buffer, int bufferOffset, int length)
 | |
|     {
 | |
|       return GetChars(_dataReader.GetOrdinal(name), fieldOffset, buffer, bufferOffset, length);
 | |
|     }
 | |
| 
 | |
|     /// <summary>
 | |
|     /// Invokes the GetChars method of the underlying datareader.
 | |
|     /// </summary>
 | |
|     /// <remarks>
 | |
|     /// Returns 0 for null.
 | |
|     /// </remarks>
 | |
|     /// <param name="i">Ordinal column position of the value.</param>
 | |
|     /// <param name="buffer">Array containing the data.</param>
 | |
|     /// <param name="bufferOffset">Offset position within the buffer.</param>
 | |
|     /// <param name="fieldOffset">Offset position within the field.</param>
 | |
|     /// <param name="length">Length of data to read.</param>
 | |
|     public virtual Int64 GetChars(int i, Int64 fieldOffset,
 | |
|       char[] buffer, int bufferOffset, int length)
 | |
|     {
 | |
|       if (_dataReader.IsDBNull(i))
 | |
|         return 0;
 | |
|       else
 | |
|         return _dataReader.GetChars(i, fieldOffset, buffer, bufferOffset, length);
 | |
|     }
 | |
| 
 | |
|     /// <summary>
 | |
|     /// Invokes the GetData method of the underlying datareader.
 | |
|     /// </summary>
 | |
|     /// <param name="name">Name of the column containing the value.</param>
 | |
|     public IDataReader GetData(string name)
 | |
|     {
 | |
|       return GetData(_dataReader.GetOrdinal(name));
 | |
|     }
 | |
| 
 | |
|     /// <summary>
 | |
|     /// Invokes the GetData method of the underlying datareader.
 | |
|     /// </summary>
 | |
|     /// <param name="i">Ordinal column position of the value.</param>
 | |
|     public virtual IDataReader GetData(int i)
 | |
|     {
 | |
|       return _dataReader.GetData(i);
 | |
|     }
 | |
| 
 | |
|     /// <summary>
 | |
|     /// Invokes the GetDataTypeName method of the underlying datareader.
 | |
|     /// </summary>
 | |
|     /// <param name="name">Name of the column containing the value.</param>
 | |
|     public string GetDataTypeName(string name)
 | |
|     {
 | |
|       return GetDataTypeName(_dataReader.GetOrdinal(name));
 | |
|     }
 | |
| 
 | |
|     /// <summary>
 | |
|     /// Invokes the GetDataTypeName method of the underlying datareader.
 | |
|     /// </summary>
 | |
|     /// <param name="i">Ordinal column position of the value.</param>
 | |
|     public virtual string GetDataTypeName(int i)
 | |
|     {
 | |
|       return _dataReader.GetDataTypeName(i);
 | |
|     }
 | |
| 
 | |
|     /// <summary>
 | |
|     /// Gets a date value from the datareader.
 | |
|     /// </summary>
 | |
|     /// <remarks>
 | |
|     /// Returns DateTime.MinValue for null.
 | |
|     /// </remarks>
 | |
|     /// <param name="name">Name of the column containing the value.</param>
 | |
|     public virtual DateTime GetDateTime(string name)
 | |
|     {
 | |
|       return GetDateTime(_dataReader.GetOrdinal(name));
 | |
|     }
 | |
| 
 | |
|     /// <summary>
 | |
|     /// Gets a date value from the datareader.
 | |
|     /// </summary>
 | |
|     /// <remarks>
 | |
|     /// Returns DateTime.MinValue for null.
 | |
|     /// </remarks>
 | |
|     /// <param name="i">Ordinal column position of the value.</param>
 | |
|     public virtual DateTime GetDateTime(int i)
 | |
|     {
 | |
|       if (_dataReader.IsDBNull(i))
 | |
|         return DateTime.MinValue;
 | |
|       else
 | |
|         return _dataReader.GetDateTime(i);
 | |
|     }
 | |
| 
 | |
|     /// <summary>
 | |
|     /// Gets a decimal value from the datareader.
 | |
|     /// </summary>
 | |
|     /// <remarks>
 | |
|     /// Returns 0 for null.
 | |
|     /// </remarks>
 | |
|     /// <param name="name">Name of the column containing the value.</param>
 | |
|     public decimal GetDecimal(string name)
 | |
|     {
 | |
|       return GetDecimal(_dataReader.GetOrdinal(name));
 | |
|     }
 | |
| 
 | |
|     /// <summary>
 | |
|     /// Gets a decimal value from the datareader.
 | |
|     /// </summary>
 | |
|     /// <remarks>
 | |
|     /// Returns 0 for null.
 | |
|     /// </remarks>
 | |
|     /// <param name="i">Ordinal column position of the value.</param>
 | |
|     public virtual decimal GetDecimal(int i)
 | |
|     {
 | |
|       if (_dataReader.IsDBNull(i))
 | |
|         return 0;
 | |
|       else
 | |
|         return _dataReader.GetDecimal(i);
 | |
|     }
 | |
| 
 | |
|     /// <summary>
 | |
|     /// Invokes the GetFieldType method of the underlying datareader.
 | |
|     /// </summary>
 | |
|     /// <param name="name">Name of the column containing the value.</param>
 | |
|     public Type GetFieldType(string name)
 | |
|     {
 | |
|       return GetFieldType(_dataReader.GetOrdinal(name));
 | |
|     }
 | |
| 
 | |
|     /// <summary>
 | |
|     /// Invokes the GetFieldType method of the underlying datareader.
 | |
|     /// </summary>
 | |
|     /// <param name="i">Ordinal column position of the value.</param>
 | |
|     public virtual Type GetFieldType(int i)
 | |
|     {
 | |
|       return _dataReader.GetFieldType(i);
 | |
|     }
 | |
| 
 | |
|     /// <summary>
 | |
|     /// Gets a Single value from the datareader.
 | |
|     /// </summary>
 | |
|     /// <remarks>
 | |
|     /// Returns 0 for null.
 | |
|     /// </remarks>
 | |
|     /// <param name="name">Name of the column containing the value.</param>
 | |
|     public float GetFloat(string name)
 | |
|     {
 | |
|       return GetFloat(_dataReader.GetOrdinal(name));
 | |
|     }
 | |
| 
 | |
|     /// <summary>
 | |
|     /// Gets a Single value from the datareader.
 | |
|     /// </summary>
 | |
|     /// <remarks>
 | |
|     /// Returns 0 for null.
 | |
|     /// </remarks>
 | |
|     /// <param name="i">Ordinal column position of the value.</param>
 | |
|     public virtual float GetFloat(int i)
 | |
|     {
 | |
|       if (_dataReader.IsDBNull(i))
 | |
|         return 0;
 | |
|       else
 | |
|         return _dataReader.GetFloat(i);
 | |
|     }
 | |
| 
 | |
|     /// <summary>
 | |
|     /// Gets a Short value from the datareader.
 | |
|     /// </summary>
 | |
|     /// <remarks>
 | |
|     /// Returns 0 for null.
 | |
|     /// </remarks>
 | |
|     /// <param name="name">Name of the column containing the value.</param>
 | |
|     public short GetInt16(string name)
 | |
|     {
 | |
|       return GetInt16(_dataReader.GetOrdinal(name));
 | |
|     }
 | |
| 
 | |
|     /// <summary>
 | |
|     /// Gets a Short value from the datareader.
 | |
|     /// </summary>
 | |
|     /// <remarks>
 | |
|     /// Returns 0 for null.
 | |
|     /// </remarks>
 | |
|     /// <param name="i">Ordinal column position of the value.</param>
 | |
|     public virtual short GetInt16(int i)
 | |
|     {
 | |
|       if (_dataReader.IsDBNull(i))
 | |
|         return 0;
 | |
|       else
 | |
|         return _dataReader.GetInt16(i);
 | |
|     }
 | |
| 
 | |
|     /// <summary>
 | |
|     /// Gets a Long value from the datareader.
 | |
|     /// </summary>
 | |
|     /// <remarks>
 | |
|     /// Returns 0 for null.
 | |
|     /// </remarks>
 | |
|     /// <param name="name">Name of the column containing the value.</param>
 | |
|     public Int64 GetInt64(string name)
 | |
|     {
 | |
|       return GetInt64(_dataReader.GetOrdinal(name));
 | |
|     }
 | |
| 
 | |
|     /// <summary>
 | |
|     /// Gets a Long value from the datareader.
 | |
|     /// </summary>
 | |
|     /// <remarks>
 | |
|     /// Returns 0 for null.
 | |
|     /// </remarks>
 | |
|     /// <param name="i">Ordinal column position of the value.</param>
 | |
|     public virtual Int64 GetInt64(int i)
 | |
|     {
 | |
|       if (_dataReader.IsDBNull(i))
 | |
|         return 0;
 | |
|       else
 | |
|         return _dataReader.GetInt64(i);
 | |
|     }
 | |
| 
 | |
|     /// <summary>
 | |
|     /// Invokes the GetName method of the underlying datareader.
 | |
|     /// </summary>
 | |
|     /// <param name="i">Ordinal column position of the value.</param>
 | |
|     public virtual string GetName(int i)
 | |
|     {
 | |
|       return _dataReader.GetName(i);
 | |
|     }
 | |
| 
 | |
|     /// <summary>
 | |
|     /// Gets an ordinal value from the datareader.
 | |
|     /// </summary>
 | |
|     /// <param name="name">Name of the column containing the value.</param>
 | |
|     public int GetOrdinal(string name)
 | |
|     {
 | |
|       return _dataReader.GetOrdinal(name);
 | |
|     }
 | |
| 
 | |
|     /// <summary>
 | |
|     /// Invokes the GetSchemaTable method of the underlying datareader.
 | |
|     /// </summary>
 | |
|     public DataTable GetSchemaTable()
 | |
|     {
 | |
|       return _dataReader.GetSchemaTable();
 | |
|     }
 | |
| 
 | |
| 
 | |
|     /// <summary>
 | |
|     /// Invokes the GetValues method of the underlying datareader.
 | |
|     /// </summary>
 | |
|     /// <param name="values">An array of System.Object to
 | |
|     /// copy the values into.</param>
 | |
|     public int GetValues(object[] values)
 | |
|     {
 | |
|       return _dataReader.GetValues(values);
 | |
|     }
 | |
| 
 | |
|     /// <summary>
 | |
|     /// Returns the IsClosed property value from the datareader.
 | |
|     /// </summary>
 | |
|     public bool IsClosed
 | |
|     {
 | |
|       get
 | |
|       {
 | |
|         return _dataReader.IsClosed;
 | |
|       }
 | |
|     }
 | |
| 
 | |
|     /// <summary>
 | |
|     /// Invokes the IsDBNull method of the underlying datareader.
 | |
|     /// </summary>
 | |
|     /// <param name="i">Ordinal column position of the value.</param>
 | |
|     public virtual bool IsDBNull(int i)
 | |
|     {
 | |
|       return _dataReader.IsDBNull(i);
 | |
|     }
 | |
| 
 | |
|     /// <summary>
 | |
|     /// Returns a value from the datareader.
 | |
|     /// </summary>
 | |
|     /// <param name="name">Name of the column containing the value.</param>
 | |
|     public object this[string name]
 | |
|     {
 | |
|       get
 | |
|       {
 | |
|         object val = _dataReader[name];
 | |
|         if (DBNull.Value.Equals(val))
 | |
|           return null;
 | |
|         else
 | |
|           return val;
 | |
|       }
 | |
|     }
 | |
| 
 | |
|     /// <summary>
 | |
|     /// Returns a value from the datareader.
 | |
|     /// </summary>
 | |
|     /// <param name="i">Ordinal column position of the value.</param>
 | |
|     public virtual object this[int i]
 | |
|     {
 | |
|       get
 | |
|       {
 | |
|         if (_dataReader.IsDBNull(i))
 | |
|           return null;
 | |
|         else
 | |
|           return _dataReader[i];
 | |
|       }
 | |
|     }
 | |
|     /// <summary>
 | |
|     /// Returns the RecordsAffected property value from the underlying datareader.
 | |
|     /// </summary>
 | |
|     public int RecordsAffected
 | |
|     {
 | |
|       get
 | |
|       {
 | |
|         return _dataReader.RecordsAffected;
 | |
|       }
 | |
|     }
 | |
| 
 | |
|     #region IDisposable Support
 | |
| 
 | |
|     private bool _disposedValue; // To detect redundant calls
 | |
| 
 | |
|     /// <summary>
 | |
|     /// Disposes the object.
 | |
|     /// </summary>
 | |
|     /// <param name="disposing">True if called by
 | |
|     /// the public Dispose method.</param>
 | |
|     protected virtual void Dispose(bool disposing)
 | |
|     {
 | |
|       if (!_disposedValue)
 | |
|       {
 | |
|         if (disposing)
 | |
|         {
 | |
|           // free unmanaged resources when explicitly called
 | |
|           _dataReader.Dispose();
 | |
|         }
 | |
| 
 | |
|         // free shared unmanaged resources
 | |
|       }
 | |
|       _disposedValue = true;
 | |
|     }
 | |
| 
 | |
|     /// <summary>
 | |
|     /// Disposes the object.
 | |
|     /// </summary>
 | |
|     public void Dispose()
 | |
|     {
 | |
|       // Do not change this code. Put cleanup code in Dispose(bool disposing) above.
 | |
|       Dispose(true);
 | |
|       GC.SuppressFinalize(this);
 | |
|     }
 | |
| 
 | |
|     /// <summary>
 | |
|     /// Object finalizer.
 | |
|     /// </summary>
 | |
|     ~SafeDataReader()
 | |
|     {
 | |
|       Dispose(false);
 | |
|     }
 | |
| 
 | |
|     #endregion
 | |
| 
 | |
|   }
 | |
| }
 |