将两个数据库中的数据添加到一个网格视图中

本文关键字:一个 网格 视图 添加 数据 两个 数据库 | 更新日期: 2023-09-27 18:31:10

我有两个不同的数据库,并希望从两个数据库中获取数据并将其插入网格视图中。

这是我的问题:

DB1 有两个表,我需要从中提取数据

用户
FName
液化
电子邮件
用户标识
用户名

用户数据
角色
部门
用户标识

DB 2 有 1 个表,我需要从中提取数据

登录
创建日期
用户名

我的网格视图最终需要显示以下内容:

f姓名 l姓名 电子邮件部门角色 创建日期

我需要以某种方式将这三个表连接到 1 个网格视图中。我无法控制数据库,因此无法创建任何新表。我的问题是我似乎无法成功链接这些。关于如何解决这个问题的任何想法?

将两个数据库中的数据添加到一个网格视图中

可以使用 DataBind() 手动将网格视图绑定到三个数据库表的内存中并集。查看LINQ Union()扩展方法/运算符。

另一种方法是在三个数据库上创建一个视图并绑定到该视图。

假设您使用的是实体框架,则可以形成 2 个查询以从 DB1 和 DB2 中提取数据,然后联接这两个查询,最后通过新的匿名类型选择所需的列。请注意,两个查询必须是 IEnumerable(不是 IQueriable),因为它们属于两个不同的上下文。

from u in User
join ud in UserData on u.UserId equals ud.UserId
join l in Login on u.UserName equals l.UserName
select new { fName=u.FName, LName=u.LName, Email=u.Email, Dept=ud.Department, Role=ud.Role, CreateDate=l.CreateDate};

使用简单的连接创建视图 将此用作GridViewDataSource。然后编辑GridView上的列以仅显示您感兴趣的字段,或者使View仅返回这些列。您的选择可能是这样的:

CREATE VIEW myview AS
SELECT u.fname,
       u.lname,
       u.email,
       ud.department,
       ud.role l.CreateDate
FROM db1.dbo.USER u
INNER JOIN db1.dbo.userdata ud ON u.userid = ud.userid
INNER JOIN db2.dbo.login l ON u.username = l.username

然后你可以像这样使用它:

SELECT * FROM myview

以及更高级的查询:

SELECT * FROM myview WHERE userid=1

可选阅读:创建链接服务器