2013-10-25 1 views
0

SQL 쿼리의 결과를 Array 또는 C#의 Collection으로 옮기는 방법은 무엇입니까?C#의 Array 또는 Collection에 대한 단일 열의 SQL 쿼리?

내 SQL 쿼리 (MYTABLE에서 성 열에서 null이 아닌 값으로 성 값을 선택) :

: 여기

SELECT LastName FROM mytable WHERE LastName IS NOT NULL 

그리고 것은 내가 그 열이 새 데이터 세트를 생성하기 전에 실행 된 코드입니다

string connectionString = @"Data Source='/path-to-datatable/ASTS.sdf';"; 
string strSql = "SELECT LastName FROM mytable WHERE LastName IS NOT NULL"; 
SqlCeConnection mConnection = new SqlCeConnection(connectionString); 
SqlCeCommand mCommand = new SqlCeCommand(strSql, mConnection); 
PartNumberDataSet = new MyDataBase(); 
// Read all rows from the table into a dataset 
SqlCeDataAdapter PNadapter = new SqlCeDataAdapter(mCommand); 
PNadapter.Fill(PartNumberDataSet, "mytable "); 

그러나 메모리에 저장해야하는 데이터의 양을 최소화하고 싶습니다. (나는 그 테이블에 20 개 정도의 열을 가지고 있습니다.) 대신이 쿼리를 일부 배열이나 컬렉션에 저장할 수 있습니까? LastName 값만 필요합니다.

+0

귀하의 코드는 이미에만 열 필요로드됩니다. 뭐가 문제 야? – Steve

답변

1

데이터 세트 및 데이터 어댑터가 과도하거나 과도하지 않을 수 있습니다. DataSet이 필요한지 스스로 물어보아야합니다 (예 : DataSet을 사용하도록 설계된 API로 전달하는 경우). 당신이 그것을 필요로한다면 아마도 당신이 프로파일을 작성하고 너무 무겁다는 것을 결정하지 않는 한, 그것에 대해 아무 것도하지 않으려는 인센티브가 거의 없을 것입니다.

그러나 DataSet이 필요하지 않고 데이터베이스의 성 또는 다른 데이터 목록을 가져와야하는 경우 SqlCeDataReader을 사용하여 데이터베이스에서 결과 집합을 읽고 수집.

while 루프를 사용하여 각 레코드를 읽고 데이터 판독기에서 성을 추출하십시오. 각성에 대해 컬렉션에 추가하십시오. 다음의 라인을 따라

뭔가 작업을해야합니다 :

List<string> lastNames = new List<string>(); 
using(SqlCeDataReader dr = mCommand.ExecuteReader()) 
{ 
    while(dr.Read()) 
    { 
     string lastName = (string)dr["LastName"]; 

     lastNames.Add(lastName); 
    } 
}