一个带两个连接字符串的sql命令

时间:2014-08-11 22:38:25

标签: c# sql sql-server inner-join sqlcommand

我想在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],另一个用于[FirstDataBase] 对于[SecondDataBase] ...... 我怎样才能做到这一点 ? 如何将两个SqlConnectionConnectionString插入一个SqlCommand?要么 我怎么能以其他方式做到这一点?

4 个答案:

答案 0 :(得分:6)

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

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

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

答案 1 :(得分: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 Management Studio中存在的相同层次结构来执行任务。

答案 2 :(得分:3)

如果数据库位于不同的服务器上,您可以创建一个"链接服务器"在Management Studio。

  1. 从主数据库中转到服务器对象 - >链接服务器。
  2. 右键单击Linked Servers,然后点击" New Linked Server"
  3. 在“常规”页面上,选择您要链接的服务器类型,并根据需要输入凭据。
  4. 添加有权访问链接数据库的本地用户,然后输入" remote"您想成为的用户并按确定。
  5. 完成。
  6. 然后在数据库名称前面,您需要指定哪个服务器。一个例子:

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

    关于链接服务器的一个重要部分是您映射用户,以便同一用户不必存在于两台计算机上。然后,带有链接的数据库会自动将您登录到另一个数据库中。

答案 3 :(得分:1)

您的查询是数据库指定的“[FirstDataBase]。[dbo]。[table1]”。所以你只需要连接到一个数据库(甚至可以是[FirstDataBase]或[SecondDataBase])以外的数据库。你的代码应该运行良好。