0

我设计了一个数据库,为了更好地展示我的问题,我对其进行了简化:

TB: CONSULTANTS

      ID        uniqueidentifier

      NAME      NVARCHAR(30)

TB: EXPENSES

      ID                uniqueidentifier

      AMOUNT            money

      CONSULTANTID      uniqueidentifier

CONSULTANTID 是来自顾问表的 FK,简单吧?

我创建了一个包含两个数据表的数据集,它们是顾问和费用

具有相应的查询,例如通过顾问 ID 获取费用等

但是,我想在网格视图中显示的是:

金额和顾问姓名而不是顾问 ID


当我尝试返回带有(ExpenseId、Amount、ConsultantName)的数据表时,由于架构与基本数据表 EXPENSES(ExpenseId、Amount、ConsultantId)不匹配,它会导致错误。

我该怎么做才能从 BLL 获得 (ExpenseId, Amount, ConsultantName(not id)) ?


我是否必须通过将两个表连接在一起来创建另一个数据表?因为 ASP.NET 网站说这不是创建 DAL 和 BLL 的优选方式

或者是否有可能我对 gridview 的 BoundField 进行了一些更改(如果可能的话,如何将两个不同的适配器的输出绑定在一起)。

4

2 回答 2

0

我从 ASP.NET 站点示例中找到了答案


在我们创建 BLL 之前,我们必须弄清楚每个 Table Adapter 需要什么。

因此,在我的情况下,我必须使用复合 SELECT 语句将顾问名称列和其他需要的列包含在费用数据表中。

那是,

SELECT EXPENSEID, AMOUNT, CONSULTID, (SELECT CONSULTANTNAME FROM CONSULTANTS WHERE CONSULTANTS.CONSULTANTID=EXPENSES.CONSULTANTID) from Expenses

然后我们可以设法从这个 DAL 中获取所有需要的数据。

于 2012-12-24T11:33:57.207 回答
0

好吧,您可以创建一个方法DAL,从数据库中获取数据并返回DataTable or DataSet适合您的数据。

Select c.id as ConsultantId,c.Name as Name,e.amount
from consultant c
inner join experses e
on c.ConsultantId=e.ConsultantId

让您的 BAL 做业务逻辑,例如创建顾问类对象数组,并对金额进行验证(如金额不能小于 0)。

BAL 返回可用于绑定数据控件的对象数组Consultant(或者您甚至可以从 BAL 发回 dataTable。

我认为 Linq 正在使用第一种方法,它从 Linq 语法生成 sql 脚本并返回特定类型对象的集合。

于 2012-12-24T13:00:37.557 回答