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

Posted

技术标签:

【中文标题】一个带有两个连接字符串的 sql 命令【英文标题】:one sql command with two connection string 【发布时间】:2014-10-04 21:18:23 【问题描述】:

我想在 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 ?要么 我怎样才能以其他方式做到这一点?

【问题讨论】:

我认为没有办法这样做,我认为即使可以,也不分离连接的任何最佳实践。 如果这些数据库在同一台服务器上,那么任何一个连接字符串都可以。您只需要连接到服务器。分离连接将是一个性能问题,因为连接不会发生在数据库服务器上。 【参考方案1】:

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

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

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

【讨论】:

【参考方案2】:

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

【讨论】:

【参考方案3】:

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

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 个不同的连接与 2 个不同的用户用于 2 个不同的数据库。在这种情况下你会怎么做? @Ian 好吧,如果 OP 要求这将是他的问题。但是,如果应用程序要在应用程序中使用多个数据库,则应创建一个可以访问这两个数据库的特定用户。限制在申请要求可能要求的最低限度。【参考方案4】:

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

    从主数据库中转到服务器对象 -> 链接服务器。 右键单击链接服务器,然后点击“新建链接服务器” 在“常规”页面上,选择您要链接到的服务器类型,并在需要时输入凭据。 添加将有权访问链接数据库的本地用户并输入您想成为的“远程”用户,然后按确定。 完成。

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

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

链接服务器的重要之处在于,您可以映射用户,这样就不必在两台机器上都存在同一个用户。然后,带有链接的数据库会自动将您登录到另一个数据库中。

【讨论】:

您的回答是一个不错的方法,您应该添加更多细节/示例以帮助未来的访问者。因为设置它可能很棘手。

以上是关于一个带有两个连接字符串的 sql 命令的主要内容,如果未能解决你的问题,请参考以下文章

带有 sql 连接字符串的 perl 脚本看似故障转移点(。)

带有数据目录的连接字符串(c#、sql server)

带有 Service Pack 2 的 SQL Server Developer Edition 的 jTDS 连接字符串

带有 JSP 的 JDBC 连接字符串 SQL Server 导致“非法转义字符”错误

SQL中字符串的连接

Oracle查询出两个字段连接成一个字段..中间有符号隔开