我正在尝试创建一个数据传输实用程序,它将数据从一个 OleDb 数据库的表传输到另一个 OleDb 数据库的表。 (可以是 SQL 服务器或 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 的新手,所以如果这是一个愚蠢的简单问题,我真的很抱歉。我希望我已经提供了有关我的问题的足够信息,但如果我遗漏了某些内容或某些内容在我的问题中没有意义,请告诉我。 任何帮助将不胜感激。谢谢。
最佳答案
与读者一起遍历每一行并复制值。您必须指定列名,因为我不知道它们是什么,也不知道您的表中有多少列。这应该会引导您朝着正确的方向前进。
//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();
}
如果表之间的列名不同,则读取器(列#Name)将是正在读取的数据库所需列的名称。如果您需要对此示例的进一步解释,请告诉我
关于c# - 在 Windows 窗体应用程序中将数据从一个 OleDb 数据库复制到另一个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49102631/