2009-10-26 3 views
1

올바른 방법으로 접근하고 있는지는 잘 모르겠지만 제안이 있으면 매우 열렬하고 감사합니다.SQL 데이터 어댑터로 SQL 쿼리 작성 하시겠습니까? 구성 섹션에서 쿼리 생성하기

SQL 데이터베이스에서 데이터의 차트를 만들 예정입니다.

차트에 '나이'와 '백분위 수'또는 가장 관련있는 2 개의 필드가 있습니다.

필자의 web.config에 'Percentiles'라는 구성 섹션이 있습니다. 이것은 표시되는 백분위 수가이 구성 섹션에서 식별 될 수 있도록하기위한 것입니다. 예를 들어 :

<percentiles> 
<add percentile="P50" visible="true"> 
<add percentile="P75" visible="true"> 
<add percentile="P85" visible="false"> 
<add percentile="P95" visible="true"> 
... 
</percentiles> 

나는 백분위의 목록을 구문 분석하고 그 목록을 기반으로 내 쿼리를 내 데이터 집합을 필터링하거나 생성하는 중 싶습니다. 백분위 수는 데이터베이스에 열로 저장됩니다. 그래서 예를 들어 내 쿼리

SELECT P50, P75, P95 FROM MyData 

지금 난 그냥 SELECT * 내 데이터 집합에서 해당 열을 제거, 또는 단지에 '시리즈'로 추가하지 않는 수도있을 것 같군요 그 구성에 따라 다음과 같이 할 내 차트. 그러나, 나는 일을하는 방식을 개선하려는 초보 개발자입니다. 내 작은 경험에서 모든 데이터를 잡는 것 (비록 소량이지만)은 좋은 습관이 아닙니다.

그래서 여기가 SQLDataAdapter에 도착합니다. 원하는 열만 포함하도록 코드를 통해 쿼리를 작성할 수 있습니까? 가능한 경우 궁금해하는 psuedocode는 다음과 같습니다.

foreach(Percentile p in PercentileConfiguration) 
{ 
    myDataAdapter.Select.Columns.Add(p.Percentile); 
} 

이 방법이 좋은 방법입니까? 모든 제안은 매우 감사드립니다! 고맙습니다!

답변

0

나는 혼란 스럽다. 언뜻보기에 이것은 데이터베이스를 쿼리하는 방법에 대한 질문 일뿐입니다. 그리고 그 대답은 당신이 그렇게하기위한 SQL 명령을 만드는 것입니다. web.config에 데이터베이스 필드 이름을 저장하는 이유를 이해할 수 없습니다. 쿼리를 "SELECT P50, P75, P95 From MyData"와 같이 나타내려면 그렇게 만듭니다.

0

SELECT * .... SELECT P50, P75 등보다 약간 느립니다. 한 번만 쿼리를 실행하면 (루프 또는 여러 번 반복되는 것과 달리) 쿼리 테이블에 엄청난 양의 열 또는 대용량 데이터가있는 열이있는 경우 성능이 저하되므로 명목상의 성능이 저하 될 수 있습니다. 특정 컬럼을 선택하는 데 필요한 노력과 유지 보수는 아마도 가치가 없을 것입니다. 누군가는 한때 읽을 수있는 코드 (유지 보수 가능)와 밀리 초가 더 빨라질 수있는 코드를 읽을 수있는 코드로 선택해야한다고 말했습니다.

그렇다면 SQL Text를 구성한 다음 어댑터에 전달해야합니다.

뭔가 같은 :


StringBuilder columns = new StringBuilder(); 
foreach(Percentile p in PercentileConfiguration) 
{ 
    if(columns.ToString().Length > 0) columns.Append(", "); 
    columns.Append(p.Percentile); 
} 
string sql = string.Format("SELECT {0} FROM myTable", columns.ToString()); 
SqlDataAdapter da = new SqlDataAdapter(sql, connectionString); 
... 
... 
...