一个SQL命令和两个连接字符串

本文关键字:两个 连接 字符串 SQL 命令 一个 | 更新日期: 2023-09-27 18:17:36

我想在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中?或

一个SQL命令和两个连接字符串

我实际上已经重读了你的问题,你不需要两个连接字符串。您的查询命令可以影响您希望连接的任何数据库。例如:

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 Management Studio中相同的层次结构来执行任务。

您只需要连接到第一个数据库。然后,查询将从那里连接到第二个数据库。或者,如果你愿意,你也可以连接到第二个数据库,但关键是你只需要一个连接。

如果您使用的是Management Studio,同样的原则也适用,您将连接到第一个数据库,然后运行查询连接到第二个数据库。

显然,这是假设第一个数据库可以与第二个数据库通信(正如@Tim Medora在评论中指出的)。

如果数据库在不同的服务器上,您可以在Management Studio中创建一个"Linked Server"。

  1. 从主数据库中转到Server Objects -> Linked Servers.
  2. 右键单击链接服务器,然后点击"新建链接服务器"
  3. 在General页面选择你想要链接到的服务器类型,并根据需要输入凭证。
  4. 添加可以访问链接数据库的本地用户,并输入您想要成为的"远程"用户,然后按Ok。

然后在数据库名称前面指定哪个服务器。一个例子:

     select * from [2.2.2.2].[Test].[dbo].[MyTable] 
         join [1.1.1.1].[OtherDb].[dbo].[OtherTable] on ...etc

链接服务器的伟大之处在于您可以映射用户,因此相同的用户不必存在于两台机器上。带有链接的数据库会自动将您记录在另一个数据库中。

您的查询是数据库指定的"[FirstDataBase].[dbo].[table1]"。因此,您只需连接到数据库(甚至可以是[FirstDataBase]或[SecondDataBase]以外的数据库)。您的代码应该运行良好。