2009-11-28 1 views
1

SqlDataReader을 사용하여 SQL Server에서 데이터를 읽습니다. 그러나 때로는 메모리에 읽기 전용 경량 연결이 필요없는 개체로 데이터를 캐시하고 싶습니다. 나는 BCL에서 나를 위해 어떤 옵션도 찾을 수 없었다. 그러한 컨테이너의 구현을 직접 작성해야합니까 아니면 사용할 수 있습니까?SqlDataReader에서 데이터를 저장하기위한 DataTable의 대신 읽기 쉬운 가벼운 읽기?

데이터베이스의 데이터를 간단한 형식으로 저장하기 위해 어떤 대안을 사용할 수 있습니까? 나를 위해 DataTable 전혀 후보가 아닙니다.

편집 : 내가 선택하고 어떤 데이터를 알게되면

, 내가 쉽게 List<T> 또는 무언가로 내 독자를 변환하는 LINQ를 사용할 수 있습니다. 하지만 대신 구조를 알지 못하는 데이터를 캐시 할 수 있기를 원합니다.

답변

3
List<object[]> 

당신이 얻을 수있는 경량에 대한 보인다.

그리고 더 많은 기능 (예 : 열 이름, 데이터 바인딩 지원, 정렬, 필터링)을 원하면 해당 기능을 파생/캡슐화하고 추가 할 수 있습니다.

귀하의 요구 사항이 다소 모호합니다. 가벼운 의미는 무엇입니까? 부적절한 DataTable은 무엇입니까? DataTable에서 제공하는 기능은 무엇입니까?

+0

@Joe 경량화로 인해 메모리 사용량이 아니라 속도를 의미합니다. 초기 테스트 결과 DataTable은 LINQ Execute 메서드보다 느린 것으로 나타났습니다. List 솔루션 정보 - 정확합니다. 기능을 추가하면됩니다. 나는 BCL에서 존재하는 구현물을 찾고자했다. –

+0

DataTable 클래스와 Execute 메서드 간의 속도 차이에 대해 이야기 할 때 비교 대상에 대해 명확하지 않습니다. – Joe

+0

SqlDbReader 대 LINQ Translate 에서 읽는 @Joe DataTable.Load 메서드는 SqlDbReader에서 읽고 형식화 된 열거 형으로 변환하는 메서드입니다. DataTable은 더 느리고 더 커집니다. –

0

가장 좋은 방법은 데이터 열을 나타내는 형식을 사용하고 각 행에 대해 해당 클래스의 인스턴스를 만들고 독자의 값으로 속성을 채우고 인스턴스를 List<YourClass> 구조에 저장하는 것입니다. .

뭔가 같은 : 어떤 ORM (객체 관계형 매퍼)가 무엇의 핵심에 기본적이다

using(SqlDataReader rdr = sqlCommand.ExecuteReader()) 
{ 
    List<YourClass> resultList = new List<YourClass>(); 

    while(rdr.Read()) 
    { 
     YourClass work = new YourClass(); 

     // set the properties   
     work.Property1 = rdr["Column1"].Value; 
     ..... 
     work.PropertyN = rdr["ColumnN"].Value; 

     resultList.Add(work); 
    } 
} 

- 가장 빠른 방법 (DataReader를)를 사용하여 데이터베이스에서 데이터를 읽고에서 .NET 객체를 생성 그것.

마크

+0

정확하게 어떤 데이터를 반환하는지 알고 있습니다. DataTable과 같은 기능을 가진 일반 컨테이너를 찾고 있지만 DataTable은 아닙니다. –

1

고유 한 데이터 구조를 만듭니다.

BCL이 모든 사람에게 제공되는 것은 아닙니다. 그것은 빌딩 블록으로 구성되어 있습니다. BCL에는 고유 한 데이터 구조를 만드는 데 필요한 빌딩 블록이 포함되어 있습니다.

BCL에 모든 문제에 대한 해결책이 포함되어 있으면 부풀어 오를 수 있습니다. 기능의 모든 조각이 "기성품"에서 사용 가능하지 않아야합니다. 그렇지 않으면 프로그래머가 추가 할 가치가 없습니다.

"정상적인"사용 패턴과는 다른 명확한 요구 사항이있는 것 같습니다. DataSets과 ORM 사이에서, 대다수의 프로젝트는 요구 사항이 요구하는 기능 없이는 잘 처리됩니다.

1

List<Dictionary<String, Object>>을 사용할 수 있습니다. 여기서 사전 키는 열 이름이고 값은 셀 값입니다.

많은 행이있는 경우 열 이름을 List<String> 및 값 List<List<Object>> (또는 Array)으로 분리 할 수 ​​있습니다.

0

사용이 :

List<string> Variable1 = new List<string>(); 
//Do something with the generic 

string[] MyArray = Variable1.ToArray(); 

이 메모리에 저장하는 필수 가볍고 효율적인 OBJ입니다.