Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.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# 使用C将数据从数据集移动到Oracle数据库_C#_Oracle_Visual Studio 2008_Ms Access_Dataset - Fatal编程技术网

C# 使用C将数据从数据集移动到Oracle数据库

C# 使用C将数据从数据集移动到Oracle数据库,c#,oracle,visual-studio-2008,ms-access,dataset,C#,Oracle,Visual Studio 2008,Ms Access,Dataset,我一直在绞尽脑汁想弄明白为什么我的代码不起作用。 我试图从access数据库中读取数据集,并将数据插入到以前创建的Oracle数据库中。 当我尝试以下代码时,它将无法工作,尽管我使用了try-and-catch块,但在调试时它将冻结,并且不会显示任何错误。 如果你能看到我已经注释掉了我的foreach循环正上方的块..这非常有效,非常感谢你的任何帮助: private void button3_Click(object sender, EventArgs e) {

我一直在绞尽脑汁想弄明白为什么我的代码不起作用。 我试图从access数据库中读取数据集,并将数据插入到以前创建的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]作为值添加到参数中。 我认为这不是你的本意

跳过columns循环,将第一列值添加到id,将第二列值添加到数据。
那应该是你想要的。。。。如果没有,请再描述一点…

扩展Judgemaik的答案,我相信您需要这样做,而不是真正知道access表中列的名称,但您知道:

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

我的答复中概述了类似的做法。在那个特定的案例中,我将数据从SQLServerCompact移动到Access,但同样的想法也可以很好地用于在任意两个OleDb数据源之间移动数据


它使用OleDbDataAdapter将源表拉入数据表,将其复制到另一个数据表,然后使用另一个OleDbDataAdapter更新目标数据库中的相应表。

您好,谢谢您的回复。我注意到了这个循环并做了一些更改,但仍然不太清楚在参数中添加值是什么意思。是否有其他方法可用于直接将数据从datagridview移动到oracle数据库?非常完美,谢谢:-