0

この質問は、最終的な学校のプロジェクトでDAL-BLLアーキテクチャを使用して作成しているASP.NETWebサービスに関するものです。

2つのテーブルの内部結合を使用したselectクエリであるストアドプロシージャがあります。したがって、ストアドプロシージャはマルチテーブル値を返します。私のDALtableAdapterメソッドの1つは、このストアドプロシージャにアクセスします。BLLで戻り値を取得するにはどうすればよいですか?ストアドプロシージャによって返されるはずのクラス構造と同様のクラス構造を作成する必要がありますか?または同じことを達成するための直接的な方法はありますか?よろしくお願いします。理解を深めるためにコードアプレットが必要な場合はお知らせください。ありがとう

詳細については、次のとおりです。DALでSQLデータセット(.xsd)を使用しています。だから私は「保険」と呼ばれるデータテーブルを持っています。これにはtableAdapterがあります。アダプタのクエリの1つは、内部結合を持つストアドプロシージャを参照しています。したがって、私の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から間違ったデータテーブルを返そうとしています。これを解決するのを手伝ってください。

4

2 に答える 2

0

解決策が見つかりました:)ついに機能しました。

データセット デザイナーを使用して新しいテーブル アダプターを作成し、そこでクエリの 1 つとして SP を呼び出しました。このようにして作成されたデータテーブルには、すべてのフィールド (Insurance および InsuranceCompany から) が含まれています。これで、ASP.NET は、戻り値の型が新しく作成されたデータ テーブルであることを検出できます。魅力のように機能します。

これを解決するためのより良い方法があれば、コメントしてください。

ありがとうございました。

于 2010-07-29T20:06:14.797 に答える
0

ADO .Net データセットを使用している場合。ウィザードは、同じテーブルを確実に作成します。データアクセス層から、次の手順を実行します

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 ページでこれをキャッチし、メソッドを呼び出します。ここで BLL では、さまざまな操作を実行して、UI のコードを下げ、さまざまな操作からクリーンに保つこともできます。
于 2010-07-26T06:41:10.977 に答える