我正在尝试制作一个程序,将数据从一个表复制到另一个表中的另一个表。
事情是表格不完全相同。所以我们说这些是我的表:
服务器A: 表A(Col1,Col2,Col3)
服务器B: 表B(Col1,Col2)
我想从ServerA.TableA复制到ServerB.TableB。
我的代码:
Truncate_table(ConnectionB, "TableB");
MySqlCommand CmdB = new MySqlCommand("", ConnectionB);
CmdB.CommandText = "INSERT INTO ServerB.TableB (col1, col2) VALUES (@val1, @val2)";
using (MySqlCommand cmd = new MySqlCommand("", ConnectionA))
{
cmd.CommandText = "SELECT col2, col3 FROM ServerA.TableA";
using (MySqlDataReader reader = cmd.ExecuteReader())
{
while (reader.Read())
{
CmdB.Parameters.AddWithValue("@val1", reader.GetInt32(0));
CmdB.Parameters.AddWithValue("@val2", reader.GetInt32(1));
CmdB.ExecuteNonQuery();
}
}
}
然而,它给出了错误,说'参数'@ val1'已被定义。'。
你们能给我一些建议吗?
还有更有效的方法吗?但我想在C#中做到这一点。
答案 0 :(得分:1)
尝试添加一次参数,然后在while
循环中设置这些参数的值:
MySqlCommand CmdB = new MySqlCommand("", ConnectionB);
CmdB.CommandText = "INSERT INTO ServerB.TableB (col1, col2) VALUES (@val1, @val2)";
CmdB.Parameters.AddWithValue("@val1", 0); // Default values
CmdB.Parameters.AddWithValue("@val2", 0);
using (MySqlCommand cmd = new MySqlCommand("", ConnectionA))
{
cmd.CommandText = "SELECT col2, col3 FROM ServerA.TableA";
using (MySqlDataReader reader = cmd.ExecuteReader())
{
while (reader.Read())
{
CmdB.Parameters["@val1"].Value = reader.GetInt32(0));
CmdB.Parameters["@val2"].Value = reader.GetInt32(1));
CmdB.ExecuteNonQuery();
}
}
}
另外,我可能错了,但我相信您需要使用?
来分隔MySql的参数。如果您有任何其他问题,可以尝试将@val1
和@val2
替换为?val1
和?val2
。
答案 1 :(得分:1)
您正在逐行处理数据。这是一种从表复制到另一个表的非常低效的方法。您可以使用类似的代码在数据库上只执行一个INSERT来获得相同的结果,您只需要先读取要插入的所有行。
答案 2 :(得分:0)
哦,我刚刚添加了
CmdB.Parameters.Clear();
之后
CmdB.ExecuteNonQuery();