使用C#上的参数从一个数据库复制行中的行

时间:2014-02-16 23:43:16

标签: c# mysql copy bulkinsert

我正在尝试制作一个程序,将数据从一个表复制到另一个表中的另一个表。

事情是表格不完全相同。所以我们说这些是我的表:

服务器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#中做到这一点。

3 个答案:

答案 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();