从同一服务器上的两个数据库查询数据

时间:2014-02-14 21:06:08

标签: c# sql database-connection multiple-databases

我正在使用Visual Studio 2010在C#中编写程序。

我需要从两个不同数据库中的两个表中收集数据。我正在使用Microsoft SQL Server Management Studio来查看数据。

两个数据库都在同一台服务器上。我写了一个SQL查询来连接两个数据库中的多个表,没有问题。我能够查看Management Studio以确保我的查询正确无误。

当我试图将查询放入我的C#代码时,我意识到了这个问题。我只能在连接字符串中指定一个数据库。

var connectionSting = "Data Source=myTestServer.con;Initial Catalog=MyTrunkDB;MultipleActiveResultSets=True; User ID=User1;Password=somePW";

说我需要来自两个数据库MyTrunkDB和MyBranchBD的查询数据,我该怎么做呢?假设我的查询是正确的,我唯一的问题是在一个查询中连接到两个不同的数据库。

我还发现有人建议使用名为存储过程的东西,但我对存储过程一无所知,也找不到任何相关的示例代码。

如果有一种方法可以在C#代码中做到这一点很好,因为我更了解C#。

谢谢!

2 个答案:

答案 0 :(得分:1)

如果您只是查询数据库而不是尝试执行任何类型的扩展逻辑,则可以在SQL Server中创建一个连接到两个数据库的视图,如此处所述 - > Create view across multiple databases。然后,您需要使用原始ADO.NET或通过LINQ to Entities和Entity Framework查询视图。如果您需要执行更复杂的操作,则需要查看存储过程。

**作为T.S.指出,您需要在两个数据库之一上创建此视图,并确保您的连接字符串指向该数据库。

答案 1 :(得分:0)

只需在表名之前命名表的数据库和所有者。在MS SQL Server中,这应该有效:

select top 100 *
from database.owner.table t1
join database.owner.table t2 on t1.field1=t2.flield1 

此外,您可以跳过所有者,它会将其替换为默认值:

select top 100 *
from database..table t1
join database..table t2 on t1.field1=t2.flield1

如果你在C#上写这个并且知道它比T-SQL更好,你真的不需要存储过程,因为你可以用C#方法替换它们。 我希望这会有所帮助。