Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在Windows窗体应用程序中将数据从一个OleDb数据库复制到另一个OleDb数据库_C#_Asp.net_Sql Server_Database_Ado.net - Fatal编程技术网

C# 在Windows窗体应用程序中将数据从一个OleDb数据库复制到另一个OleDb数据库

C# 在Windows窗体应用程序中将数据从一个OleDb数据库复制到另一个OleDb数据库,c#,asp.net,sql-server,database,ado.net,C#,Asp.net,Sql Server,Database,Ado.net,我正在尝试创建一个数据传输实用程序,它将数据从一个OleDb数据库的表传输到另一个OleDb数据库的表。可以是SQL server、MySql或Access数据库 到目前为止,我已经成功地使用适当的连接字符串连接到这两个数据库。我还将源数据库中的所有数据读取到OleDbDataReader中。下面是代码 OleDbDataReader reader; string query = "SELECT * FROM " + stable.Text; // text box with sourc

我正在尝试创建一个数据传输实用程序,它将数据从一个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来复制所有内容,而无需进行列映射。但我找不到太多关于如何在OLEDB连接中做到这一点的信息

我对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();

  }

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

您知道如何读取查询生成的每一行数据吗?我可能只是遍历您的行,然后将数据插入到其他数据库中。或者您正在试图避免多次插入呼叫?不,多次插入呼叫就可以了。我有一个循环可以读取多行。但是为了简单起见,我想我应该先让一行工作,然后在我找到解决方案后添加循环。但有没有更有效的方法将数据从一个OleDb数据库复制到另一个OleDb数据库呢?最简单的方法就是使用excel批量上传数据data@AravindhanR对不起,我没听清楚。能否提供示例代码或演示链接?那真的很有帮助嗨,特罗纳尔德,这是一个非常有用的答案。为了让它在我的场景中工作,我可以使用SELECT*FROM Northwind.INFORMATION_SCHEMA.COLUMNS,其中table_NAME=N'categories'获取特定表的列名,比如categories,然后按照您的建议实现我的目标。非常感谢