一个SQL命令,使用两个连接字符串

4

我想在C#中运行这个查询。

SELECT *
FROM [FirstDataBase].[dbo].[table1]
INNER JOIN [SecondDataBase].[dbo].[table2]

我的代码是:

SqlConnection cn = new SqlConnection(myConnectionString);
SqlCommand cmd = new SqlCommand(@"SELECT * FROM [FirstDataBase].[dbo].[table1]
    INNER JOIN [SecondDataBase].[dbo].[table2]");

cmd.Connection = cn; // here is my question !!!

cn.Open();
int x = (int)cmd.ExecuteScalar();

但我的查询需要两个连接字符串...一个是用于 [FirstDataBase],另一个是用于 [SecondDataBase]... 我该怎么做? 我该如何将两个 SqlConnectionConnectionString 插入到一个 SqlCommand 中?或者 我应该用其他方法来实现它?


我认为没有任何方法可以做到这一点,即使您可以这样做,不分离连接也会违反任何最佳实践。 - Evan Frisch
如果这些数据库在同一台服务器上,那么任何一个连接字符串都可以。你只需要连接到服务器即可。将连接分开会导致性能问题,因为联接不会在数据库服务器上发生。 - Nick.McDermaid
4个回答

6
你只需要连接到第一个数据库,然后查询将从那里连接到第二个数据库。或者,如果你喜欢,你也可以直接连接到第二个数据库,但关键点在于你只需要一个连接。
如果你使用管理工具,同样的原则适用,你需要连接到第一个数据库,然后运行查询并跨越到第二个数据库。
显然,这假设第一个数据库可以与第二个数据库通信(正如@Tim Medora在评论中指出的那样)。

6

我重新阅读了你的问题,你不需要两个连接字符串。一旦连接成功,你的查询命令可以影响任何你想要的数据库。例如:

string query = @"SELECT * FROM [FirstDataBase].[dbo].[table1]
    INNER JOIN [SecondDataBase].[dbo].[table2]";

using(SqlConnection connection = new SqlConnection(ConfigurationManager.ConnectionString[@"db"].ConnectionString))
     using(SqlCommand command = new SqlCommand(query, connection))
     {
         // Logic
     }

如果您的查询影响了这两个数据库,那么它将会对它们产生影响。您可以使用在 SQL 管理工具中存在的相同层次结构来执行您的任务。


这个答案没有解决如果一个连接没有权限访问两个数据库的情况。在某些部署场景中,应用程序使用2个不同的连接和2个不同的用户访问2个不同的数据库。在这种情况下,你该怎么办? - Ian
@Ian 好的,如果OP需要这个,他会在问题中提到的。然而,如果一个应用程序将在应用程序中利用多个数据库,则应创建一个特定的用户,该用户具有访问两者的权限。限制为应用程序要求的最低限度。 - Greg

3
如果数据库在不同的服务器上,您可以在管理工具中创建“链接服务器”。
  1. 在主数据库中转到“服务器对象” -> “链接服务器”。
  2. 右键单击“链接服务器”,然后单击“新建链接服务器”。
  3. 在“常规”选项卡上,选择您想要链接到的服务器类型,并在需要时输入凭据。
  4. 添加将访问链接数据库的本地用户,输入您想要成为的“远程”用户,然后按“确定���。
  5. 完成。
然后,在数据库名称前面,您需要指定哪个服务器。 例如:
     select * from [2.2.2.2].[Test].[dbo].[MyTable] 
         join [1.1.1.1].[OtherDb].[dbo].[OtherTable] on ...etc

Linked Servers 的好处在于,您可以映射用户,这样同一个用户就不必存在于两台机器上。然后,具有链接的数据库会自动将您登录到另一台机器上。

你的回答是一个不错的方法,你应该添加更多细节/示例来帮助未来的访问者。因为设置可能会有些棘手。 - Greg

1
您的查询是指定了数据库 "[FirstDataBase].[dbo].[table1]"。因此,您只需要连接到一个数据库(即使可以是[FirstDataBase]或[SecondDataBase]之外的数据库),您的代码应该能够正常工作。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接