将两个数据库中的数据添加到一个gridview中

时间:2013-09-13 17:55:26

标签: c# linq gridview

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

这是我的问题:

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

用户
FName参数
LName的
电子邮件
用户ID
用户名

的UserData
角色

用户ID

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

登录
CREATEDATE
用户名

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

fName lName电子邮件部门角色CreateDate

我不知何故需要将这三个表连接成1个gridview。我无法控制数据库,所以我无法创建任何新表。我的问题是我似乎无法成功地链接这些。关于如何解决这个问题的任何想法?

4 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

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

答案 2 :(得分: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};

答案 3 :(得分:0)

使用简单的View创建Join,将DataSource用作GridView的{​​{1}}。然后,编辑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

可选阅读Create Linked Servers

相关问题