如何从BLL返回多表加入值
-
29-09-2020 - |
题
这个问题是关于我正在创建的ASP.NET WebService,即我的最终学校项目使用DAL-BLL架构。
我有一个存储过程,它是一个选择查询,其中包含2个表的内连接。因此,存储过程返回多表值。我的DAL TableAdapter方法之一访问此存储过程。如何检索BLL中的返回值?我是否必须创建类似于存储的proc返回的类结构?或者有直接实现相同的方法吗?帮助极大地赞赏。如果有人需要代码小程序,请告诉我,以获得更好的理解。谢谢
这里有一些信息: 我正在使用DAL中的SQL DataSet(.xsd)。所以我有一个名为“保险”的DataTable,它有一个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,包含所有的字段(来自保险和保险部门)。现在,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();
}
.
- 在UI页面上通过遵循BLL的创建对象来捕获此功能,并调用方法。在BLL中,您还可以执行各种操作来降低UI中的代码并将其与各种操作保持清除。
不隶属于 StackOverflow