这个问题是关于我正在创建的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();
}
.

  1. 在UI页面上通过遵循BLL的创建对象来捕获此功能,并调用方法。在BLL中,您还可以执行各种操作来降低UI中的代码并将其与各种操作保持清除。
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top