2013-07-22 71 views
0

我一直在努力弄清楚爲什麼我的代碼不工作。 我想從數據集中讀取來自訪問數據庫的數據,並將數據插入到先前創建的Oracle數據庫中。 當我嘗試下面的代碼時,它不會工作,雖然我使用try和catch塊,但在調試時它會凍結,並且不會顯示任何錯誤。 如果能看到,我已註釋掉塊正好我上面的foreach loop..which完美的作品,從你任何幫助這麼多的讚賞:使用C將數據從DataSet移動到Oracle數據庫#

 private void button3_Click(object sender, EventArgs e) 
    { 
     string query1 = "Select * from Test;"; 
     string StrQuery= "Insert Into TEST (ID, DATA) Values (:ID, :DATA)"; 

     Conn = new OleDbConnection(connStr); 
     Conn.Open(); 
     using (OleDbConnection connection1 = new OleDbConnection(connStr)) 
     { 
      using (OleDbDataAdapter adapter1 = new OleDbDataAdapter(query1, connection1)) 
      { 
       DataSet ds1 = new DataSet(); 
       adapter1.Fill(ds1); 
       // no need for refilling DataGridView1.DataSource = ds.Tables[0] 

       // insterting the dataset into oracle 
       try 
       { 
        using (OracleConnection connect = new OracleConnection(oradb1)) 
        { 
         connect.Open(); 
         using (OracleCommand comma = new OracleCommand(StrQuery, connect)) 
         { 


           /*comma.Parameters.Add(new OracleParameter(":ID", 2)); 
           comma.Parameters.Add(new OracleParameter(":DATA", 2)); 
           comma.ExecuteNonQuery();*/ 
          foreach (DataRow drRow in ds1.Tables[0].Rows) 
          { 
           for (int i = 0; i < ds1.Tables[0].Columns.Count; i++) 
           { 
            comma.Parameters.Add(new OracleParameter(":ID", drRow[i])); 
            comma.Parameters.Add(new OracleParameter(":DATA", drRow[i])); 
            comma.ExecuteNonQuery(); 
           } 
          } 


          connect.Close(); 
          connect.Dispose(); 
         } 
        } 

       } 

       catch (OracleException) 
       { 
        System.Diagnostics.Debugger.Break(); 
       } 
       catch (System.Exception ex) 
       { 
        MessageBox.Show(ex.Message); 
       } 

      } 
     } 

     Conn.Close(); 
    } 

回答

1

你循環列,但加入drRow [I]作爲參數中的值。 我不認爲這是你的意圖。

跳過列循環並將第一列值添加到id和第二列值到數據。 這應該是你想要的....如果不是那麼描述更多...

+0

您好Judgemaik,謝謝你的回覆。我注意到了循環並做了一些修改,但仍然不太清楚在參數中添加值的含義。有沒有另外一種方法可以直接將數據從datagridview移動到我的oracle數據庫中? –

+0

謝謝它最終使用datagridview –

0

擴大Judgemaik的答案,我相信你需要做這樣的事情,而不是(不能真正知道什麼名字在您的訪問表中的列,但你的想法:

foreach (DataRow drRow in ds1.Tables[0].Rows) 
{ 
    comma.Parameters.Add(new OracleParameter(":ID", drRow["IDColumnFromAccessDB"])); 
    comma.Parameters.Add(new OracleParameter(":DATA", drRow["DATAColumnFromAccessDB"])); 
    comma.ExecuteNonQuery(); 
} 
0

了類似的方法在我的答案here列出在我從SQL Server精簡數據移入訪問特定的情況下,但同樣的想法可能非常適合在任何兩個OleDb數據源之間移動數據。

它使用一個OleDbDataAdapter將源表拉入DataTable,將其複製到另一個DataTable,然後使用另一個OleDbDataAdapter來更新目標數據庫中的相應表。

+0

這絕對是完美的,謝謝:-) –

相關問題