簡體   English   中英

使用C#將數據從數據集移動到Oracle數據庫

[英]Moving Data from DataSet to Oracle Database using C#

我一直想弄清楚為什么我的代碼無法正常工作。 我正在嘗試從充滿訪問數據庫中數據的數據集中讀取數據,並將數據插入到先前創建的Oracle數據庫中。 當我嘗試以下代碼時,它將無法正常工作,盡管我使用了try and catch塊,但在調試時它將凍結,並且不會顯示任何錯誤。 如果可以看到我已經在我的foreach循環正上方注釋掉了該塊。.它非常完美,非常感謝您的任何幫助:

     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();
    }

您正在循環列,但是將drRow [i]作為值添加到參數中。 我認為這不是您想要的。

跳過column循環,並將第一列值添加到id,將第二列值添加到data。 那應該就是你想要的。

擴展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();
}

在這里的回答中概述了類似的方法。 在那種特殊情況下,我將數據從SQL Server Compact移到Access中,但是同樣的想法也可以很好地用於在任何兩個OleDb數據源之間移動數據。

它使用OleDbDataAdapter將源表拉到DataTable ,將其復制到另一個DataTable ,然后使用另一個OleDbDataAdapter更新目標數據庫中的相應表。

暫無
暫無

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

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