c# - 使用不同的端口号连接本地主机上的 mysql 表

标签 c# mysql database connection-string

我有 2 个表,一个位于本地数据库中,另一个位于远程服务器上。 我在 C# 中使用端口转发来获取到 localhost:3306 的 ssh 远程连接,我的本地数据库位于 localhost:3307

如果一个表都位于本地主机但端口不同,我如何将它们复制到另一个表。

这是我想要执行的查询:

cmd = new MySqlCommand(String.Format("INSERT INTO {0} (a,b,c,d) SELECT (a,b,c,d) FROM {1}", ConfigSettings.ReadSetting("main_table"), ConfigSettings.ReadSetting("main_table")), con);

两个表都有相同的列,这就是为什么我只使用配置设置中的一个输入。

但是我有 2 个连接字符串,因为它们位于不同的端口上。

con.ConnectionString = ConfigurationManager.ConnectionStrings["con1"].ConnectionString;
con2.ConnectionString = ConfigurationManager.ConnectionStrings["con2"].ConnectionString

有什么方法可以让我的查询使用这两个端口,因为我不想在 MySql 中使用 FEDERATED 连接。一定有办法,因为它们都在同一服务器上。

谢谢

编辑:

连接字符串:

<add name="Con2" connectionString="server=localhost;port=3307;user id=root;Password=*****;database=data" providerName="MySql.Data.MySqlClient"/>
<add name="Con1" connectionString="server=localhost;port=3306;user id=root;Password=******;database=data" providerName="MySql.Data.MySqlClient"/>

最佳答案

在两个不同连接上的两个单独表之间移动数据的伪代码

  1. 创建/打开与第一个 MySql 的连接
  2. 创建/运行查询以从第一个 MySql 获取 DataTable 内的数据
  3. 创建/打开与第二个 MySql 的连接
  4. 创建/运行查询以从第二个没有记录的 MySql 获取 DataTable 内的数据(使用 WHERE 1=0 或类似的方法)
  5. 循环第一个 DataTable 的行
  6. 在第二个表上调用 ImportRow,传递来自 第一行
  7. 保存第二个数据表

    DataTable dtSource = new DataTable();
    using(MySqlConnection cn1 = GetConnection("first_connection_string");
    {
        cn1.Open();
        MySqlCommand cmd = new MySqlCommand("Select x,x,x,x from t1", cn1);
        MySqlDataAdapter da = new MySqlDataAdapter();
        da.SelectCommand = cmd;
        da.Fill(dtSource);
    }
    
    DataTable dtDest = new DataTable();
    using(MySqlConnection cn2 = GetConnection("second_connection_string");
    {
        cn2.Open();
        MySqlCommand cmd = new MySqlCommand("Select x,x,x,x from t2 where 1=0", cn2);
        MySqlDataAdapter da2 = new MySqlDataAdapter();
        da2.SelectCommand = cmd;
        da2.Fill(dtDest);
    
        foreach(DataRow r in dtSource)
            dtDest.ImportRow(r);
    
        da2.Update(dtDest);
    }
    

请注意,这尚未经过测试。将其视为实验。

编辑:看到评论我将添加另一种方法来更新第二个表

    using(MySqlConnection cn2 = GetConnection("second_connection_string");
    {
        cn2.Open();
        MySqlCommand cmd = new MySqlCommand("INSERT INTO T2 (a,b) values(@a,@b)", cn2);
        cmd.Parameters.AddWithValue("@a", string.Empty); // Suppose the "a" field is a string
        cmd.Parameters.AddWithValue("@b", string.Empty); // Suppose the "b" field is a string

        foreach(DataRow r in dtSource)
        {
            cmd.Parameters["@a"].Value = r["a"].ToString();
            cmd.Parameters["@b"].Value = r["b"].ToString();
            cmd.ExecuteNonQuery();
        }
    }

这是在您不需要从目标表中的 dtSource 插入整个记录的情况下。在这种情况下,我恢复为带参数的 INSERT 命令,在源表上循环,在目标表中插入

关于c# - 使用不同的端口号连接本地主机上的 mysql 表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10869072/

相关文章:

java - jdbc driver for Microsoft SQL Server CE(Compact Edition) 3.5

c# - 什么是 C# 中的内部密封类?

jquery - 调用添加表单时无法自动填充 id 字段

sql - mysql表内连接

java - 使用 MySQL Workbench 保存和显示数据库中的图像

MongoDB setOnInsert 并推送(如果已经存在)

php - 什么时候在源代码中硬编码数据,什么时候使用数据库,什么时候使用网络服务?

c# - 如何在 Guid/UNIQUEIDENTIFIER (SQL Server) 中解释 #

c# - 如何创建一个灵活的架构,使我能够在多个不同的底层数据模型上运行?

c# - 使用 POCO 和 ObjectCotext 来自 EFcontextprovider 的自定义元数据