1

我有两个不同的数据库,并且想从两个数据库中获取数据并将其插入到 gridview 中。

这是我的问题:

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

用户
FName
LName
电子邮件用户
ID
用户名

UserData
角色
部门
UserId

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

登录
CreateDate
用户名

我的 gridview 最终需要显示以下内容:

fName lName 电子邮件部门角色 CreateDate

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

4

4 回答 4

0

您可以手动将 gridview 绑定DataBind()到三个数据库表的内存联合。查看LINQ Union()扩展方法/运算符。

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

于 2013-09-13T18:01:57.227 回答
0

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

于 2013-09-13T18:02:29.470 回答
0
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};
于 2013-09-13T18:03:25.447 回答
0

使用简单的Join创建一个视图,将其用作您的. 然后编辑您的列以仅显示您感兴趣的字段,或仅返回这些列。您的选择可能是这样的:DataSourceGridViewGridViewView

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

选读创建链接服务器

于 2013-09-13T18:09:36.940 回答