从C#中的两个数据库连接表

时间:2011-08-18 10:55:05

标签: c# database join

使用SQL Server我运行此查询没有问题......

SELECT SUM(Esi) AS Dispo 
FROM [mdb].[dbo].[Query1] AS A
  INNER JOIN [mdb2].[dbo].[TieCol] as B ON A.Alias=B.IDAlias 
WHERE Alias LIKE 'SETUP%'

我加入两个位于两个不同数据库(mdbmdb2)的表。

但是如何在我的.NET应用程序中执行此操作? 当我需要使用这个陈述时

string cmdText = "SELECT SUM(Esi) AS Dispo 
                  FROM [mdb].[dbo].[Query1] AS A
                    INNER JOIN [mdb2].[dbo].[TieCol] as B ON A.Alias=B.IDAlias 
                  WHERE Alias LIKE 'SETUP%'";

this.OP = new SqlConnection(ConfigurationManager.ConnectionStrings["mdb2"].ConnectionString);
SqlCommand sqlCommand = new SqlCommand(cmdText, this.OP);

我无法执行它,因为this.OP是与mdb2的连接...而mdb的连接是什么?

如何同时连接两个数据库?

3 个答案:

答案 0 :(得分:3)

SQL连接到服务器 - 连接字符串中的初始目录的行为类似于use - 它设置默认数据库。

因此,您的3部分SQL查询应该 。可能

  1. 确保您的应用程序(或AppPool的帐户,如果使用Web和集成安全性)使用的SQL登录具有对两个数据库的必要访问权限。 (在SQL Enterprise Manager上使用RunAs作为此帐户并尝试运行查询)
  2. 您可以尝试转义[Alias]
  3. 此外,如果mdb1mdb2之间存在耦合(例如SPROCS mdb1使用mdb2中的mdb1等表格,为了便于维护,您可以考虑在mdb2中为mdb2对象添加视图。这样可以轻松识别跨数据库的依赖关系。在这种情况下,您的查询可以使用看起来像在同一个数据库中的视图,尽管{{1}}的基础依赖仍然存在。

答案 1 :(得分:2)

我不确定是否有办法在连接字符串中执行此操作。但你可以使用表格的四部分参考来做到这一点:[server].[database].[table].[column]

答案 2 :(得分:0)

您的C#应用​​程序只需连接到一个数据库服务器即可进行此查询。 假设您的C#应用​​程序连接到[mdb]。数据库[mdb2]应该链接数据库[mdb]中的服务器。

由于您可以在sql server中运行该查询,因此必须有一个sql server连接到这两个数据库。在C#连接字符串中使用该sql server。就是这样!