使用不同的端口号连接localhost上的mysql表

时间:2012-06-03 09:03:13

标签: c# mysql database connection-string

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

如果一个表都在localhost上但具有不同的端口,我该如何将一个表复制到另一个表。

这是我想要做的查询:

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 个答案:

答案 0 :(得分:1)

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

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

    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);
    }
    
  9. 请注意,这尚未经过测试。把它作为实验。

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

        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命令,在源表上循环,在目标表中插入

相关问题