KeiStory

C# IDataReader 를 이용해 List<T> 로 변환해서 사용하는 방법

 

DB 쿼리결과를 IDataReader 로 처리하는 경우 이 객체를 이용해 값을 하나씩 읽어와

원하는 T Type 으로 List<T> 로 만들어주는 방법입니다.

아래 메서드를 활용하여 DataReader 를 이용 Row 값을 가져와 원하는 T Type 으로 값을 넣어 반환해 줍니다.

public List<T> DataReaderToList<T>(IDataReader reader) where T : new()
{
    List<T> list = new List<T>();

    while (reader.Read())
    {
        T obj = new T();

        for (int i = 0; i < reader.FieldCount; i++)
        {
            string propertyName = reader.GetName(i);
            object value = reader.GetValue(i);

            var property = obj.GetType().GetProperty(propertyName);

            if (property != null && value != DBNull.Value)
            {
                property.SetValue(obj, value);
            }
        }

        list.Add(obj);
    }

    return list;
}

 

사용방법은 만약 Person 이라는 Class 를 정의하고 해당 타입으로 쿼리 결과를 담고 싶은 경우

아래처럼 사용합니다.

string connectionString = "YourConnectionStringHere";
string query = "SELECT Id, Name, Age FROM People";

using (SqlConnection connection = new SqlConnection(connectionString))
{
    connection.Open();

    using (SqlCommand command = new SqlCommand(query, connection))
    {
        using (IDataReader reader = command.ExecuteReader())
        {
            // DataReader to List<T>
            List<Person> people = DataReaderToList<Person>(reader);
        }
    }
}
반응형

공유하기

facebook twitter kakaoTalk kakaostory naver band