2011-10-13 5 views
1

ASP.NET 데이터 중계기가 있습니다. 다음과 같이 현재, SQL 쿼리에서 얻은 데이터 소스로 설정됩니다ASP.NET 데이터 중계기에 보조 데이터 소스 추가

IDataReader dr = GetData(sql); 
myRepeater.DataSource = dr; 
myRepeater.DataBind(); 

이 잘 작동하지만 내가 지금하고 싶은 것은 SQL에서 반환 된 모든 데이터를 전달, 웹 서비스를 호출하는 것입니다 질의하고 중계기에서도 사용할 수 있도록합니다. 그래서, 내 질문에, 바인딩하기 전에 데이터 판독기 개체를 조작 할 수 있습니다 또는 데이터 리피터이를 달성하기 위해 나중에; 예 :

IDataReader dr = GetData(sql); 

var extraData = CallWS(dr);  
foreach (MyData d in extraData) 
{ 
    dr.AddField(d.Value); 
} 

myRepeater.DataSource = dr; 
myRepeater.DataBind(); 

답변

3

이렇게 할 수있는 방법은 다양합니다. 아마도 가장 쉬운 방법은 DataReader 주위를 반복 한 다음 컬렉션에 추가하여 첫 번째 쿼리의 값을 Collection에 넣는 것입니다. 그런 다음 웹 서비스를 호출하고 그 결과를 콜렉션에 추가하십시오. 그런 다음 중계기에 바인딩 할 수있는 모든 결과가 포함 된 모음을 갖게됩니다.

 IDataReader dr = GetData(sql); 
     var dataCollection = new List<string>(); 

     while(reader.Read()) 
     { 
      dataCollection.Add(reader.GetString(1)); 
     } 

     var extraData = CallWS(); 

     while(extraData.Read()) 
     { 
      dataCollection.Add(extraData.GetString(1)); 
     } 

     myRepeater.DataSource = dataCollection; 
     myRepeater.DataBind(); 

위와 같은 것입니다. 그렇게 많은 코드가 아닙니다. 결과를 웹 서비스로 전달하지 않는다는 것을 알고 있지만 다음과 같은 이유로 여러 가지 이유로 조언 할 것입니다.

1) 추가 데이터 전송. 결과를 웹 서비스에 전달하여 웹 서비스가 다시 전달하는 지점은 없습니다 (쿼리의 일부로 필요하지 않은 경우). 2) 웹 서비스가 다른 쿼리의 결과 집합없이 기능을 수행 할 수없는 경우 웹 서비스가 잘 캡슐화되지 않으며 외부 쿼리가 실제로 작동하는 데 필수적인 경우 웹 서비스 내부에 속한다고 주장 할 수 있습니다.

관련 문제