我想在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] ......
我怎样才能做到这一点 ?
如何将两个SqlConnection
或ConnectionString
插入一个SqlCommand
?要么
我怎么能以其他方式做到这一点?
答案 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。
然后在数据库名称前面,您需要指定哪个服务器。一个例子:
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])以外的数据库。你的代码应该运行良好。