2011-04-22 3 views
1

나는 에있는 쿼리로 FillDataSet을 시도하고 있습니다. 내가 이해할 수없는 것은 왜 내가 특별히 SqlDataAdapter에 쿼리 할 테이블을 부여했을 때 Fill에 테이블 이름을 명시해야만하는 이유입니다.SqlDataAdaptor가 두 번 테이블을 지정해야하는 이유는 무엇입니까?

아래 코드를 보면 쿼리 문자열에 이미 "FooTable"이 있는데 SqlDataAdapter.Fill에 "FooTable"이 다시 필요합니까?

SqlDataAdapter da = new SqlDataAdapter("SELECT * FROM FooTable", connectionString); 
DataSet ds = new DataSet(); 
da.Fill(ds, "FooTable"); 

답변

4

실제로이 경우에는 처리 할 단일 결과 집합이 있으므로이 작업을 수행 할 필요가 없습니다.

쿼리 지정된 반환 여러 결과, 각 결과 집합은 별도의 테이블에 배치됩니다 : 다음은 MSDN에서 관련 발췌입니다. 추가 결과 집합의 이름은 지정된 테이블 이름 (예 : "Table", "Table1", "Table2"등)에 정수 값을 추가하여 지정합니다. 행을 리턴하지 않는 u 리에 대해 테이블을 작성하지 않으 G로, 삽입 조회 다음에 선택 조회를 처리 할 경우, 선택 조회에 대해 작성된 표의 이름은 작성된 첫 x 째 표이기 때.에 "표"의 이름이 지정됩니다. 열 및 테이블 이름을 사용하는 응용 프로그램은 이러한 명명 패턴과의 충돌이 발생하지 않도록해야합니다. Fill 메서드는 DataSet에 대/소문자 만 다른 이름의 DataTable 개체가 여러 개있는 시나리오를 지원합니다. 이러한 상황에서 채우기는 대/소문자 구분 비교를 수행하여 해당 테이블을 찾은 다음 일치하는 항목이없는 경우 새 테이블을 만듭니다.

은 상기 MSDN의 SqlDataAdaptor.Fill() 문서에 this page에서 촬영된다.

쿼리가 저장 프로 시저이거나 여러 결과 집합을 포함하는 다른 유형의 쿼리 인 경우 채우기 명령에서 사용할 결과 집합을 지정해야합니다. 이것이 바로 두 번째 매개 변수가하는 것입니다. 그렇지 않으면 Fill 명령 자체로 가정합니다.

일반적으로 테이블에서 select를 수행하는 경우 은 소스 테이블과 동일한 이름을 사용합니다.

관련 문제