一个带有两个连接字符串的 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]...
我怎样才能做到这一点 ?
如何将两个 SqlConnection
或 ConnectionString
插入一个 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 脚本看似故障转移点(。)
带有 Service Pack 2 的 SQL Server Developer Edition 的 jTDS 连接字符串