BLLからマルチテーブル結合値を返す方法
-
29-09-2020 - |
質問
この質問は、最終学校プロジェクトのDAL-BLLアーキテクチャを使用して作成しているASP.NET Webサービスに関するものです。
私はストアドプロシージャを持っています。これは、2つのテーブルの内部結合を持つSELECTクエリです。したがって、ストアドプロシージャはマルチテーブル値を返します。 My Dal TableAdapterメソッドの1つはこのストアドプロシージャにアクセスします。 BLLの戻り値を取得するにはどうすればよいですか。ストアドプロシージャによって返されると思われるものと同様のクラス構造を作成する必要がありますか?それとも同じことを達成するための直接的な方法はありますか?大きな感謝を助けます。誰かがより良い理解を得るためにコードアプレットが必要な場合は私に知らせてください。ありがとう
これはいくつかの情報です: 私はDALでSQLデータセット(.xsd)を使用しています。だから私はTablAdapterを持つ「保険」と呼ばれるデータベースがあります。アダプタ内のクエリの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から間違ったデータベースを返しようとしています。 これを解決してください。
解決 2
解決策を見つけました:) 最後にそれを作業しました。
データセットデザイナを使用して新しいテーブルアダプタを作成し、そこでクエリの1つとしてspを呼び出しました。このようにして作成可能な分データは、含まれているすべてのフィールドを含みます(保険から)。さて、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ページでこれをキャッチしてメソッドを呼び出します。ここでBLLでは、UIのコードを下げ、さまざまな操作から清潔に保つためにさまざまな操作を行うことができます。