using System;
using System.Data;
/// <summary>
/// 객체 데이터 리더
/// </summary>
public class ObjectDataReader : IDataReader
{
//////////////////////////////////////////////////////////////////////////////////////////////////// Field
////////////////////////////////////////////////////////////////////////////////////////// Private
#region Field
/// <summary>
/// 현재 행
/// </summary>
private int currentRow = -1;
/// <summary>
/// 컬럼명 배열
/// </summary>
private string[] columnNameArray;
/// <summary>
/// 데이터 배열
/// </summary>
private object[][] dataArray;
#endregion
//////////////////////////////////////////////////////////////////////////////////////////////////// Property
////////////////////////////////////////////////////////////////////////////////////////// Public
#region 깊이 - Depth
/// <summary>
/// 깊이
/// </summary>
public int Depth
{
get
{
return 0;
}
}
#endregion
#region 닫기 여부 - IsClosed
/// <summary>
/// 닫기 여부
/// </summary>
public bool IsClosed
{
get
{
return this.currentRow < this.dataArray.Length;
}
}
#endregion
#region 영향 받은 레코드 수 - RecordsAffected
/// <summary>
/// 영향 받은 레코드 수
/// </summary>
public int RecordsAffected
{
get
{
return this.dataArray.Length;
}
}
#endregion
#region 필드 수 - FieldCount
/// <summary>
/// 필드 수
/// </summary>
public int FieldCount
{
get
{
return this.dataArray[0].Length;
}
}
#endregion
#region 인덱서 - this[name]
/// <summary>
/// 인덱서
/// </summary>
/// <param name="name">명칭</param>
/// <returns>인덱서 값</returns>
public object this[string name]
{
get
{
int index = this.GetOrdinal(name);
return this.dataArray[this.currentRow][index];
}
}
#endregion
#region 인덱서 - this[index]
/// <summary>
/// 인덱서
/// </summary>
/// <param name="index">인덱스</param>
/// <returns>인덱서 값</returns>
public object this[int index]
{
get
{
return this.dataArray[this.currentRow][index];
}
}
#endregion
//////////////////////////////////////////////////////////////////////////////////////////////////// Constructor
////////////////////////////////////////////////////////////////////////////////////////// Public
#region 생성자 - ObjectDataReader(columnNameArray, dataArray)
/// <summary>
/// 생성자
/// </summary>
/// <param name="columnNameArray">컬럼명 배열</param>
/// <param name="dataArray">데이터 배열</param>
public ObjectDataReader(string[] columnNameArray, object[][] dataArray)
{
this.columnNameArray = columnNameArray;
this.dataArray = dataArray;
}
#endregion
//////////////////////////////////////////////////////////////////////////////////////////////////// Method
////////////////////////////////////////////////////////////////////////////////////////// Public
#region 스키마 테이블 구하기 - GetSchemaTable()
/// <summary>
/// 스키마 테이블 구하기
/// </summary>
/// <returns>데이터 테이블</returns>
public DataTable GetSchemaTable()
{
return null;
}
#endregion
#region 다음 결과 여부 구하기 - NextResult()
/// <summary>
/// 다음 결과 여부 구하기
/// </summary>
/// <returns>다음 결과 여부</returns>
public bool NextResult()
{
return false;
}
#endregion
#region 데이터 읽기 - Read()
/// <summary>
/// 데이터 읽기
/// </summary>
/// <returns>처리 결과</returns>
public bool Read()
{
this.currentRow++;
return this.IsClosed;
}
#endregion
#region 불린형 값 구하기 - GetBoolean(index)
/// <summary>
/// 불린형 값 구하기
/// </summary>
/// <param name="index">인덱스</param>
/// <returns>불린형 값</returns>
public bool GetBoolean(int index)
{
return Convert.ToBoolean(this.dataArray[this.currentRow][index]);
}
#endregion
#region 바이트 값 구하기 - GetByte(index)
/// <summary>
/// 바이트 값 구하기
/// </summary>
/// <param name="index">인덱스</param>
/// <returns>바이트 값</returns>
public byte GetByte(int index)
{
return Convert.ToByte(this.dataArray[this.currentRow][index]);
}
#endregion
#region 바이트 수 구하기 - GetBytes(index, fieldOffset, bufferArray, bufferOffset, length) (Not Implemented)
/// <summary>
/// 바이트 수 구하기
/// </summary>
/// <param name="index">인덱스</param>
/// <param name="fieldOffset">필드 오프셋</param>
/// <param name="bufferArray">버퍼 배열</param>
/// <param name="bufferOffset">버퍼 오프셋</param>
/// <param name="length">길이</param>
/// <returns>바이트 수</returns>
public long GetBytes(int index, long fieldOffset, byte[] bufferArray, int bufferOffset, int length)
{
throw new Exception("The method or operation is not implemented.");
}
#endregion
#region 문자 값 구하기 - GetChar(index)
/// <summary>
/// 문자 값 구하기
/// </summary>
/// <param name="index">인덱스</param>
/// <returns>문자 값</returns>
public char GetChar(int index)
{
return Convert.ToChar(this.dataArray[this.currentRow][index]);
}
#endregion
#region 문자 수 구하기 - GetChars(index, fieldOffset, bufferArray, bufferOffset, length)
/// <summary>
/// 문자 수 구하기
/// </summary>
/// <param name="index">인덱스</param>
/// <param name="fieldOffset">필드 오프셋</param>
/// <param name="bufferArray">버퍼 배열</param>
/// <param name="bufferOffset">버퍼 오프셋</param>
/// <param name="length">길이</param>
/// <returns>문자 수</returns>
public long GetChars(int index, long fieldOffset, char[] bufferArray, int bufferOffset, int length)
{
Convert.ToString(this.dataArray[this.currentRow][index]).CopyTo((int)fieldOffset, bufferArray, bufferOffset, length);
return length;
}
#endregion
#region 일시 값 구하기 - GetDateTime(index)
/// <summary>
/// 일시 값 구하기
/// </summary>
/// <param name="index">인덱스</param>
/// <returns>일시 값</returns>
public DateTime GetDateTime(int index)
{
return Convert.ToDateTime(this.dataArray[this.currentRow][index]);
}
#endregion
#region 십진수 값 구하기 - GetDecimal(index)
/// <summary>
/// 십진수 값 구하기
/// </summary>
/// <param name="index">인덱스</param>
/// <returns>십진수 값</returns>
public decimal GetDecimal(int index)
{
return Convert.ToDecimal(this.dataArray[this.currentRow][index]);
}
#endregion
#region 배정도 실수 값 구하기 - GetDouble(index)
/// <summary>
/// 배정도 실수 값 구하기
/// </summary>
/// <param name="index">인덱스</param>
/// <returns>배정도 실수 값</returns>
public double GetDouble(int index)
{
return Convert.ToDouble(this.dataArray[this.currentRow][index]);
}
#endregion
#region 단정도 실수 값 구하기 - GetFloat(index)
/// <summary>
/// 단정도 실수 값 구하기
/// </summary>
/// <param name="index">인덱스</param>
/// <returns>단정도 실수 값</returns>
public float GetFloat(int index)
{
return Convert.ToSingle(this.dataArray[this.currentRow][index]);
}
#endregion
#region GUID 값 구하기 - GetGuid(index)
/// <summary>
/// GUID 값 구하기
/// </summary>
/// <param name="index">인덱스</param>
/// <returns>GUID 값</returns>
public Guid GetGuid(int index)
{
return new Guid(this.GetString(index));
}
#endregion
#region 16비트 정수 값 구하기 - GetInt16(index)
/// <summary>
/// 16비트 정수 값 구하기
/// </summary>
/// <param name="index">인덱스</param>
/// <returns>16비트 정수 값</returns>
public short GetInt16(int index)
{
return Convert.ToInt16(this.dataArray[this.currentRow][index]);
}
#endregion
#region 32비트 정수 값 구하기 - GetInt32(index)
/// <summary>
/// 32비트 정수 값 구하기
/// </summary>
/// <param name="index">인덱스</param>
/// <returns>32비트 정수 값</returns>
public int GetInt32(int index)
{
return Convert.ToInt32(this.dataArray[this.currentRow][index]);
}
#endregion
#region 64비트 정수 값 구하기 - GetInt64(index)
/// <summary>
/// 64비트 정수 값 구하기
/// </summary>
/// <param name="index">인덱스</param>
/// <returns>64비트 정수 값</returns>
public long GetInt64(int index)
{
return Convert.ToInt64(this.dataArray[this.currentRow][index]);
}
#endregion
#region 문자열 구하기 - GetString(index)
/// <summary>
/// 문자열 구하기
/// </summary>
/// <param name="index">인덱스</param>
/// <returns>문자열</returns>
public string GetString(int index)
{
return Convert.ToString(this.dataArray[this.currentRow][index]);
}
#endregion
#region 값 구하기 - GetValue(index)
/// <summary>
/// 값 구하기
/// </summary>
/// <param name="index">인덱스</param>
/// <returns>값</returns>
public object GetValue(int index)
{
return this.dataArray[this.currentRow][index];
}
#endregion
#region 값 배열 길이 구하기 - GetValues(valueArray)
/// <summary>
/// 값 배열 길이 구하기
/// </summary>
/// <param name="valueArray">값 배열</param>
/// <returns>값 배열 길이</returns>
public int GetValues(object[] valueArray)
{
this.dataArray[this.currentRow].CopyTo(valueArray, 0);
return this.dataArray[this.currentRow].Length;
}
#endregion
#region DB 널 여부 구하기 - IsDBNull(index)
/// <summary>
/// DB 널 여부 구하기
/// </summary>
/// <param name="index">인덱스</param>
/// <returns>DB 널 여부</returns>
public bool IsDBNull(int index)
{
return Convert.IsDBNull(this.dataArray[this.currentRow][index]);
}
#endregion
#region 데이터 구하기 - GetData(index) (Not Implemented)
/// <summary>
/// 데이터 구하기
/// </summary>
/// <param name="index">인덱스</param>
/// <returns>IDataReader</returns>
public IDataReader GetData(int index)
{
throw new Exception("The method or operation is not implemented.");
}
#endregion
#region 필드 타입 구하기 - GetFieldType(index)
/// <summary>
/// 필드 타입 구하기
/// </summary>
/// <param name="index">인덱스</param>
/// <returns>필드 타입</returns>
public Type GetFieldType(int index)
{
return this.dataArray[this.currentRow][index].GetType();
}
#endregion
#region 데이터 타입명 구하기 - GetDataTypeName(index)
/// <summary>
/// 데이터 타입명 구하기
/// </summary>
/// <param name="index">인덱스</param>
/// <returns>데이터 타입명</returns>
public string GetDataTypeName(int index)
{
return GetFieldType(index).Name;
}
#endregion
#region 명칭 구하기 - GetName(index)
/// <summary>
/// 명칭 구하기
/// </summary>
/// <param name="index">인덱스</param>
/// <returns>명칭</returns>
public string GetName(int index)
{
return this.columnNameArray[index];
}
#endregion
#region 순서 구하기 - GetOrdinal(name)
/// <summary>
/// 순서 구하기
/// </summary>
/// <param name="name">명칭</param>
/// <returns>순서</returns>
public int GetOrdinal(string name)
{
for(int i = 0; i < this.columnNameArray.Length; i++)
{
if(name.Equals(this.columnNameArray[i]))
{
return i;
}
}
return -1;
}
#endregion
#region 닫기 - Close()
/// <summary>
/// 닫기
/// </summary>
public void Close()
{
}
#endregion
#region 리소스 해제하기 - Dispose()
/// <summary>
/// 리소스 해제하기
/// </summary>
public void Dispose()
{
}
#endregion
}