【问题标题】:Copy data from one OleDb database to another in Windows Forms App在 Windows Forms App 中将数据从一个 OleDb 数据库复制到另一个数据库
【发布时间】:2018-08-12 15:30:26
【问题描述】:

我正在尝试创建一个数据传输实用程序,它将数据从一个 OleDb 数据库的表传输到另一个 OleDb 数据库的表。 (可以是 SQL server 或 MySql 或 Access 数据库)。

到目前为止,我已经成功地使用适当的连接字符串连接到两个数据库。我还将源数据库中的所有数据读入 OleDbDataReader。下面是它的代码。

 OleDbDataReader reader;
 string query = "SELECT * FROM " + stable.Text;   // text box with source table name

 cmd.CommandText = query;

 try
 {
    reader = cmd.ExecuteReader();
 }
 catch(Exception ex)
 {
    MessageBox.Show(ex, "Error");
    return;
 }

我坚持的部分是,如何将数据从 OleDbDataReader 写入另一个数据库中的表(假设表具有相似的列)。源和数据表将由用户在运行时输入。

我知道对于 SqlConnection,我们可以使用 SqlBulkCopy 来复制所有内容而无需列映射。但我找不到太多关于如何在 OleDbConnection 中做到这一点的信息。

我对 SQL 和 ado.net 还很陌生,所以如果这是一个愚蠢的简单问题,我真的很抱歉。我希望我已经提供了有关我的问题的足够信息,但是如果我遗漏了某些内容或某些内容在我的问题中没有意义,请告诉我。 任何帮助将不胜感激。谢谢。

【问题讨论】:

  • 您知道如何读取查询生成的每一行数据吗?我可能只是遍历您的行并将数据插入到您的其他数据库中。还是您想避免多次 INSERT 调用?
  • 不,多次插入调用就可以了。我有一个读取多行的循环。但为了简单起见,我想我首先尝试让一行工作,然后在我找出解决方案后添加循环。但是有没有更有效的方法将数据从一个 OleDb 数据库复制到另一个?
  • 最简单的方法你可以使用excel批量上传你的数据
  • @AravindhanR 嗯,对不起,我没有真正明白这一点。您能否提供示例代码或演示链接?真的很有帮助。 :)

标签: c# asp.net sql-server database ado.net


【解决方案1】:

用您的阅读器遍历每一行并复制这些值。您必须指定列名,因为我不知道它们是什么,或者您的表上有多少。这应该会引导您朝着正确的方向前进。

 //Connection to the database to be inserted
 OleDbCommand insertCmd = new OleDbCommand("Your connection");

 //Read each row and execute new query. The Reader was established previously in your code.
 while (reader.Read())
 {
       //Create your query. Each item in the first parenthesis is the column name in your table. 
       //Each item in the second set of parenthesis is a parameter to be specified later.  
       insertCmd.CommandText =  "INSERT INTO table_name (column1Name, column2Name, column3Name, ...) VALUES(@column1Name, @column2Name, @column2Name, ...)";

       //Add the parameter values. The values are pulled from the reader that's reading your "Read" database
       insertCmd.Parameters.AddWithValue("@column1Name", reader["column1Name"]);
       insertCmd.Parameters.AddWithValue("@column2Name", reader["column2Name"]);
       //...Other columns you may have

       //Execute Query
       insertCmd.ExecuteNonQuery();

  }

如果表之间的列名不同,则读取器 (column#Name) 将是正在读取的数据库的所需列的名称。如果您需要进一步解释此示例,请告诉我

【讨论】:

  • 您好 Tronald,这是一个非常有用的答案。为了让它在我的场景中工作,我可以使用SELECT * FROM Northwind.INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = N'Categories' 获取特定表(比如类别)的列名,并按照您的建议来实现我的目标。非常感谢。 :)
猜你喜欢
  • 2012-10-30
  • 2017-04-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多