2012-10-25 3 views
0

내 질문을 시작하기 전에 언급해야 할 것은 C++ 프로그래머가 아니기 때문에 코드 구문이 잘못되었을 수도 있습니다. 나는 아마추어이고 개선이 필요하다. ;;)내 데이터 세트에 데이터 어댑터가 채워진 결과?

데이터 어댑터 출력 결과로 작업하는 것에 대해 질문이있다. 의이 논문 라인을 살펴 보자 :

public DataSet CollectData() 
{ 
    DataSet result = new DataSet(); 
    using (SqlConnection conn = new SqlConnection(connectionString)) 
    using (SqlCommand cmd = new SqlCommand("dbo.StoredProc1", conn)) 
    { 
     cmd.CommandType = CommandType.StoredProcedure; 
     IDataAdapter adapter = new SqlDataAdapter(cmd); 

     adapter.Fill(result);/// filling a dataset 

     return result; 
    } 
} 

을이 기능은 데이터 세트를 작성하고 그것을 돌려 볼 수있다. 나는이 저장된 개체를 보여 클래스를 가지고

DataSet dataSet = DataObj.CollectData(); /// above function! 

    string token; 
    string lemma; 
    foreach (DataRow row in dataSet.Tables[0].Rows) 
    { 
     token = ((string)row["Token"]); 
     lemma = ((string)row["Lemma"]); 
     ... 

     //// TODO: ex. write to file 
    } 

하지만 : 외부에서 I는 다음과 같이 그것을 통해 내가 루프해야이 개체를 사용하려는. 이 같은

클래스는 :

public class Lexeme 
{ 
private int tokenId = -1; 
private string token; 
private string lemma; 
/// some get and set functions! 
} 

이 클래스는 객체를 보유하고 보는 바와 같이 어쨌든

그래서 내가 알고 싶은이 (가 데이터베이스 테이블 내부에 저장된 객체의 래퍼 같은 뭔가) 데이터 집합 대신이 개체의 목록 (여기 Lexeme)을 반환 하시겠습니까? 나는 효율적인 메모리 사용을 의미합니다. 엄청난 양의 데이터로 작업하기 때문입니다. 이 같은

예를 들어 뭔가 :

public MYDATASET CollectData() 
{ 
    MYDATASET result = new MYDATASET(); 
    using (SqlConnection conn = new SqlConnection(connectionString)) 
    using (SqlCommand cmd = new SqlCommand("dbo.StoredProc1", conn)) 
    { 
     cmd.CommandType = CommandType.StoredProcedure; 
     IDataAdapter adapter = new SqlDataAdapter(cmd); 

     adapter.Fill(result);/// filling a dataset 

     return result; 
    } 
} 

데이터 세트는 상속 될 수 있는가?

답변

1

자신의 개체 대신 Typed Dataset을 사용할 수 있습니다. 이렇게하면 데이터 집합을 쉽게 채울 수있을뿐만 아니라 강력한 형식의 열과 행 내의 각 속성에 쉽게 액세스 할 수 있습니다. Visual Studio의 Add New Item 창으로 이동하여 데이터 집합을 추가하십시오. 디자이너를 사용하여 새 테이블을 추가하고 SQL 쿼리에서 반환되는 열을 추가합니다. 각 열의 속성 창으로 이동하여 유형 (int, string 등)을 지정하십시오. 각 테이블에 대한 속성이 형식화 된 데이터 집합으로

public MyTypedDataset GetMyDataSet() 
{ 
    MyTypedDataset ds = new MyTypedDataset(); 
    using (SqlConnection conn = new SqlConnection(connectionString)) 
    using (SqlCommand cmd = new SqlCommand("dbo.StoredProc1", conn)) 
    { 
     cmd.CommandType = CommandType.StoredProcedure; 
     IDataAdapter adapter = new SqlDataAdapter(cmd); 

     adapter.Fill(ds.Table1); 

     return result; 
    } 
} 

: 전에

여기에서, 당신은 데이터 집합을로드 할 때, 데이터 집합의 형태의 새로운 객체를 생성, 당신은 것처럼 그것을 채울 디자이너에서 만든 항목 (기본적으로 나는 Table1라는 생각?)

이제

데이터를 액세스 할 때, 당신은

MyTypedDataset ds = GetMyDataSet(); 
string myToken = ds.Table1.Rows[0].Token; 
string myLemma = ds.Table1.Rows[0].Lemma; 

또는 foreach 문에서

할 수 있습니다

MyTypedDataset ds = GetMyDataSet(); 
foreach(var row in ds.Table1) 
{ 
    string myToken = row.Token; 
    string myLemma = row.Lemma; 
} 

이 확실히 아니다 당신의 물건의 목록을 되 찾는 것에는 좋지만, 거의 다 있습니다. 자신의 개체 목록을 원하면 Entity Framework 또는 NHibernate와 같이 Object Relational Mapper을 사용해야 할 가능성이 큽니다.

+0

신의 축복이 있기를, 나는 이것을 정확히 찾고있었습니다 ... http : //support.microsoft.com/kb/320714 – Mostafa

관련 문제