首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用C#上的参数从一个数据库复制行

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

Stack Overflow用户
提问于 2014-02-16 23:43:15
回答 3查看 1.7K关注 0票数 0

我试图制作一个程序,将数据从一个表复制到另一个服务器中。

问题是桌子不是完全一样的。假设这是我的桌子:

服务器A: TableA (Col1,Col2,Col3)

服务器B: TableB (Col1,Col2)

我想从ServerA.TableA复制到ServerB.TableB。

我的代码:

代码语言:javascript
复制
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();
        }

    }
}

但是,它给出了一个错误,即“Parameter@val1”已经定义好了。

你们能给我提个建议吗?

有没有更有效的方法来做到这一点?但我想在C#上做这个。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-02-16 23:46:41

尝试添加一次参数,然后在while-loop中设置这些参数的值:

代码语言:javascript
复制
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
EN

Stack Overflow用户

发布于 2014-02-16 23:52:16

你正在一排排地处理这些数据。这是从一个表复制到另一个表的一种非常低效率的方法。您可以通过在数据库上执行一个insert的类似代码实现相同的结果,您只需要在前面读取要插入的所有行。

票数 1
EN

Stack Overflow用户

发布于 2014-02-16 23:45:06

哦,我刚加了

代码语言:javascript
复制
CmdB.Parameters.Clear();

之后

代码语言:javascript
复制
CmdB.ExecuteNonQuery();
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21818392

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档