使用不同的端口号连接本地主机上的 mysql 表
本文关键字:主机 mysql 口号 连接 | 更新日期: 2023-09-27 18:36:04
>我有 2 个表,一个在本地数据库中,另一个在远程服务器上。我在 C# 中使用端口转发来获取与本地主机的 ssh 远程连接:3306 我的本地数据库位于本地主机: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 中使用联合连接。必须有办法,因为它们都在同一台服务器上。
谢谢
编辑:
连接字符串:
<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"/>
在两个不同连接上的两个单独表之间移动数据的伪代码
- 创建/打开与第一个 MySql 的连接
- 创建/运行查询以从第一个MySQL获取DataTable中的数据
- 创建/打开与第二个 MySql 的连接
- 创建/运行查询以从第二个MySQL获取DataTable中的数据,而无需记录(使用WHERE 1 = 0或类似的东西)
- 循环访问第一个数据表的行
- 在第二个表上调用 ImportRow,传递来自第一行
-
保存第二个数据表
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 命令,在源表上循环,插入目标表