문제

이 질문은 최종 학교 프로젝트를 위해 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();
}
.

  1. BLL의 개체를 만들고 메서드를 호출하여 UI 페이지 에서이 기능을 Catch합니다.여기에서 BLL에서는 UI에서 코드를 낮추고 다양한 조작에서 깨끗하게 유지할 수있는 다양한 작업을 수행 할 수도 있습니다.
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top