簡體   English   中英

在 Windows 窗體應用程序中將數據從一個 OleDb 數據庫復制到另一個數據庫

[英]Copy data from one OleDb database to another in Windows Forms App

我正在嘗試創建一個數據傳輸實用程序,它將數據從一個 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();

  }

如果表之間的列名不同,則讀取器 (column#Name) 將是正在讀取的數據庫所需列的名稱。 如果您需要對此示例的進一步解釋,請告訴我

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM