我有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"/>
答案 0 :(得分:1)
伪代码在两个不同的连接上的两个单独的表之间移动数据
保存第二个数据表
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命令,在源表上循环,在目标表中插入