2011-12-06 3 views
1

친구, 동적 SQL 쿼리를 실행하고 목록을 반환합니다. goole에 대한 대부분의 인터넷 검색에서 목록 형식이 sqldatareader를 목록으로 변환해야한다는 것을 알았습니다. 어떤 쿼리를 실행할 지 모를 때 어떻게 할 수 있습니까?동적 쿼리로 인해 SqlDataReader를 알 수없는 형식의 목록으로 변환합니다.

Execute(String query) 
{ 
    SqlConnection con=new SqlConnection(connection);//connection from elsewhere 
    SqlCommand cmd = new SqlCommand(query); 
    cmd.connection=con; 
    con.Open(); 
    SqlDataReader result=cmd.ExecuteReader(); 
    //How to convert result to a list when i do not know the table structure 
} 

이제 결과를 목록으로 변환하고 싶습니다. 그러나 쿼리가 작동하는 테이블의 세부 사항을 알지 못합니다. 쿼리가 다를 수 있으며 테이블을 쿼리 할 수 ​​있습니다. 이러한 조건에서 어떻게 결과를리스트로 변환 할 수 있습니까? 가능한가?

이것은 테이블 세부 사항을 모르는 경우 하나의 간단한 질문으로 남겨 둡니다. 그러면 목록의 항목은 무엇이 될지 아니면 무엇이 목록일까요?

그 질문에 대답하기 위해 나는 각 목록 항목이 SqlDataReader 결과의 한 행에 해당하는 목록을 가질 수 있습니까?

List < DataRow> x = result.Select(). ToList()를 사용할 수 있지만 사용하고 싶지 않습니다.

목록의 각 항목을 결과의 각 행에 매핑하고 동시에 행을 만드는 원자 데이터 유형으로 구성해야합니다.

예 : 학생 이름 선택, studentid의 studentid; 이것은 SqlDataReader 결과를 반환하고 형식에 문자열과 int가 포함 된 목록을 구성한 다음 목록에 결과 행을 채 웁니다.

쿼리 studentid = 1432, 그때 내가 유형이 INT, 문자열, 문자가 포함 된 목록을 구성하고, 결과의 행 목록을 채우려 선택 마크, 마크에서 대상 학년으로 변경하는 경우 .

할 방법이 있습니까?

추신 : 사용자가 쿼리를 만들었고 예상되는 열의 수를 알고 있기 때문에 사용자가 위와 같이 목록을 반환하면 값을 선택하는 방법을 알고 있습니다.

+0

당신은 SqlTableAdapter를 사용할 수없는 이유는 무엇입니까?당신은 결과의 스키마 인 DataRow의 모음을 얻을 것입니다. –

답변

3

발신자이 유형을 알 수있는 경우, 일반적인 방법으로 확인하고 행 당 T을 만들 ...

또는 날씬한 점 그물이 이미 않기 때문에 그 :

var list = connection.Query<T>(command [, args]).ToList(); 

발신자가 T를 알 수없는 경우 을 사용하여 List<dynamic>을 채우고으로 확장 물을 캐스팅하여 키/값 쌍으로 채 웁니다.

은 또는, 날씬한 점 그물이 이미 않기 때문에 :

var list = connection.Query(command [, args]).ToList(); 

그런 다음 호출자가 사용할 수 있습니다

foreach(var item in list) { 
    Console.WriteList("{0}, {1}, {2}", item.marks, item.subject, item.grade); 
} 
+0

Gravell, Super가 단어입니다! 고마워, 내가 원한 것을 성취하는데 정말 도움이된다. 나는 또한 오늘 새로운 무언가, Dapper dot net 및 ExpandoObject를 배웠다. – david

관련 문제