【问题标题】:How to connect to two databases in one connection string in C#?如何在 C# 中的一个连接字符串中连接到两个数据库?
【发布时间】:2013-05-02 07:01:49
【问题描述】:

通常,当我需要使用 C# 连接到数据库时,我会使用以下命令例程:
- 定义一个 mysql 连接。
- 打开一个 mysql 连接。
- 定义一个 sql 语句/查询。
- 使用 MySqlCommand 执行查询。

示例代码:

string con1 = "server=<db1 IP>;User Id=user;password=password;Persist Security Info=True;database=db1";
string con2 = "server=<db2 IP>;User Id=user;password=password;Persist Security Info=True;database=db2";
MySqlConnection cn1 = new MySqlConnection(con1);
MySqlConnection cn2 = new MySqlConnection(con2);
MySqlCommand com

cn1.Open();
string sql = "some query";
com = new MySqlCommand(sql, cn1);
com.executeNonQuery();  
cn1.Close();

我上面的问题在于我使用 MySqlCommand 命令的部分,因为它是指示数据库连接的地方,因此它现在将要查询哪个数据库来喜欢

MySqlCommand com = new MySqlCommand(sql, con);  

其中 sql 是 sql 语句,con 是用于查询的连接。

如何在一个sql语句中查询两个数据库?
考虑以下几点:(我正在使用 MySQL)

- I have two databases, db1 and db2.
- db1 is located in City A
- db1 is located in City B
- Both databases have one table (tbl) and they both have the same structure.
- Table structure for tbl:
    +-------------+--------------+------+-----+---------+-------+
    | Field       | Type         | Null | Key | Default | Extra |
    +-------------+--------------+------+-----+---------+-------+
    | id          | int(9)       | NO   | PRI |         |       |
    | ref_no      | int(9)       | NO   |     |         |       |
    | name        | varchar(10)  | YES  |     | NULL    |       |
    +-------------+--------------+------+-----+---------+-------+
- I want to run a query on db1.tbl against db2.tbl
- Example query: "select ref_no from db1.tbl where ref_no not in (select ref_no from db2.tbl)"  

或者有没有其他方法可以解决这种问题?...

【问题讨论】:

  • 这是必须在数据库服务器级别设置的东西,而不是在 C# 中,我相信。链接服务器是一种方法。或者,您可以从两个服务器(通过两个连接字符串)获取结果,然后在程序中根据需要操作数据。我敢肯定还有其他选择,这只是立即想到的两个。
  • 使用两个连接并使用 Linq 加入。见stackoverflow.com/questions/4278993/…
  • 这可能是一个重要的权衡:使用两个单独的连接(最佳分离),而不是连接到包含两个数据库的单个服务器(允许跨数据库连接和事务,但如果您确实使用这些,则可以防止您将来将一个数据库移动到另一台服务器)。

标签: c# mysql database


【解决方案1】:
string con = "server=localhost;user=root;pwd=1234;";

using (MySqlConnection cn1 = new MySqlConnection(con))
{
    MySqlCommand cmd = new MySqlCommand();
    cmd.Connection = cn1;
    cn1.Open();

    cmd.CommandText = sql;
    MySqlDataAdapter da = new MySqlDataAdapter();
    ....
}

sql语句:

select a.ref_no from db1.tbl a where a.ref_no not in (select b.ref_no from db2.tbl b)

您可以一次查询多个数据库。


更新

我认为唯一的选择是同时创建 2 个连接,并通过 C# 在 2 个服务器之间传递数据。

【讨论】:

  • 我尝试了您的代码并且它有效,但它仅适用于您尝试查询连接字符串上指示的同一服务器上的多个数据库...如果 db1 和 db2 位于不同的位置怎么办? (例如 db1's server=
    和 db2's server=
  • 我认为唯一的选择是同时创建2个连接并通过C#手动在它们之间传递数据
【解决方案2】:

您正在寻找的是Federated Storage Enginge

在其中一个服务器(甚至两者)上,您可以创建一个占位符表,由 MySQL 服务器透明地路由到另一个 MySQL 服务器。

它允许您仅在一台服务器上运行查询,并且您的服务器将联系另一台服务器以获取所需的数据。

【讨论】:

    猜你喜欢
    • 2012-01-17
    • 1970-01-01
    • 1970-01-01
    • 2023-03-10
    • 2019-11-06
    • 1970-01-01
    • 2010-11-22
    • 1970-01-01
    • 2012-11-21
    相关资源
    最近更新 更多