BLL에서 다중 테이블 조인 값을 반환하는 방법
-
29-09-2020 - |
문제
이 질문은 최종 학교 프로젝트를 위해 DAL-BLL 아키텍처를 사용하여 작성하고있는 ASP.NET WebService에 관한 것입니다.
2 개의 테이블에 대한 내부 조인이있는 선택 쿼리 인 저장 프로 시저가 있습니다. 따라서 저장 프로 시저는 다중 테이블 값을 반환합니다. My DAL Tableadapter 메서드 중 하나는이 저장 프로 시저에 액세스합니다. BLL에서 반환 값을 어떻게 검색합니까? 저장된 proc가 반환 해야하는 것과 유사한 클래스 구조를 만들어야합니까? 또는 동일한 것을 달성하는 직접적인 방법이 있습니까? 크게 감사하도록 도와주세요. 누군가가 더 나은 이해를 얻으려면 코드 애플릿이 필요하면 알려주십시오. 감사합니다
여기에 몇 가지 정보가 있습니다. DAL에서 SQL DataSet (.xsd)를 사용하고 있습니다. 그래서 나는 tableadapter가있는 "보험"이라고 불리는 데이트 할 수 있습니다. 내부 조인이있는 저장 프로 시저에 대한 어댑터의 쿼리 중 하나입니다. 그래서 내 sp는 다음과 같습니다 :
ALTER PROCEDURE dbo.GetInsurancesPaged
(
@startRowIndex int,
@maximumRows int,
@patientID int
)
AS
select * from
(
SELECT Insurance.insuranceID, Insurance.memberID, Insurance.groupID, Insurance.accountType, Insurance.comments, Insurance.patient, Insurance.company, InsuranceCompany.companyID, InsuranceCompany.companyName, InsuranceCompany.address, InsuranceCompany.phone, InsuranceCompany.fax, ROW_NUMBER() over (order by Insurance.dateModified DESC) as ROWRANK
FROM Insurance INNER JOIN InsuranceCompany ON Insurance.company = InsuranceCompany.companyID
WHERE Insurance.patient = @patientID
)
AS DataWithRowNumbers
WHERE ROWRANK > @startRowIndex AND ROWRANK <= (@startRowIndex + @maximumRows)
.
이 SP는 내부 조인의 2 개의 테이블의 조합이되는 데이트 값을 반환합니다. 내가 틀렸다면 나를 바로 잡아주세요.
이제 내 BLL에서는 다음과 같습니다.
[System.ComponentModel.DataObjectMethodAttribute(System.ComponentModel.DataObjectMethodType.Select, true)]
public mySys.InsuranceDataTable GetInsurancesPaged(int startRowIndex, int maximumRows, int patientID)
{
return insAdapter.GetInsurancesPaged(startRowIndex, maximumRows, patientID);
}
.
insadapter가 insurancetableAdapter
의 인스턴스 인 경우실행에 오류가 발생합니다. SP를 성공적으로 실행할 수 있으므로 문제가 BCZ에서만 BLL에서 잘못된 DataTable을 반환하려고합니다. 나를 해결하도록 도와주세요.
해결책 2
해결책을 찾았습니다. :) 마침내 그것을 일하고 있습니다.
Dataset Designer를 사용하여 새 테이블 어댑터를 만들었고 SP를 쿼리 중 하나로 호출합니다.이렇게 작성된 DataTable은 모든 필드 (보험 및 InsuranceCompany)가 포함되어 있습니다.이제 ASP.NET은 리턴 유형이 새로 생성 된 DataTable임을 감지 할 수 있습니다. 매력처럼 작동합니다.
이 문제를 해결하는 더 좋은 방법이있는 경우에는 의견을 말하십시오.
시간을 보내 주셔서 감사합니다.
다른 팁
ADO .NET 데이터 집합을 사용하는 경우.마법사는 동일한 테이블을 구현합니다.이제 DataAccess 레이어에서 다음 단계를 수행하십시오.
1. Create a object of dataset. (DLL)
Private YourCustomeDataSetDatatable DataAccess()
{
YourCustomDataSet ds = new YourCustomDataSet(); // also called strongly typed dataset
YourCustomeDataSetDatatable dt = ds.YourCustomeDataSetDatatable ()
YourCustomeDataSetTableAdapter ta = new ds.YourCustomeDataSetTableAdapter (); // table adapter that will be invoked
ta.Fill(dt); // or if you have set to return only you can also use GetData()
}
2. Now in business layer
Private YourCustomeDataSetDatatable DataAccess()
{
// create a object of DLL.
MyDAL myDal = new MyDAL ();
return myDal.DataAccess();
}
.
- BLL의 개체를 만들고 메서드를 호출하여 UI 페이지 에서이 기능을 Catch합니다.여기에서 BLL에서는 UI에서 코드를 낮추고 다양한 조작에서 깨끗하게 유지할 수있는 다양한 작업을 수행 할 수도 있습니다.