Nutan R Ответов: 2

Массовая вставка CSV в таблицу oracle


Я пытаюсь вставить содержимое csv-файла, читая его через файл.ReadAllLines() и сохранение его в DataTable.
После сохранения этого я вызываю OracleBulkCopy, чтобы вставить все записи в мою таблицу.

Я использовал фреймворк 4 для этого .Версия NET и Oracle 11g.

Это дает мне ошибку говоря "
Could not load file or assembly 'Oracle.DataAccess, Version=4.122.1.0, Culture=neutral, PublicKeyToken=89b483f429c47342' 
"

Помогите мне выяснить, что именно я здесь упускаю.

Я прилагаю код для справки.

Что я уже пробовал:

using System;
using System.Data;
using System.IO;  
using System.Configuration;
using Oracle.DataAccess.Client;


namespace ImportCSV
{
    class Program
    {
        static void Main()
        {
            try
            {
                // your code here 
                string CSVFilePathName = @"C:\TempShare\TestCSVFile.csv";
                
                string[] Lines = File.ReadAllLines(CSVFilePathName);
                string[] Fields;
                Fields = Lines[0].Split(new char[] { ',' });
                int Cols = Fields.GetLength(0);
                DataTable dt = new DataTable();
                DataRow Row;
                //1st row must be column names; force lower case to ensure matching later on.
                for (int i = 0; i < Cols; i++)
                {
                    dt.Columns.Add(Fields[i].ToLower(), typeof(string));
                }
                for (int i = 1; i < Lines.GetLength(0); i++)
                {
                    Fields = Lines[i].Split(new char[] { ',' });
                    Row = dt.NewRow();
                    for (int f = 0; f < Cols; f++)
                        Row[f] = Fields[f];
                    dt.Rows.Add(Row);
                }
                SaveUsingOracleBulkCopy("tFinal", dt);
                
            }
            catch (Exception ex)
            {
                Console.Write("Error is " + ex.ToString());
                throw;
            }
        }

        static void SaveUsingOracleBulkCopy(string destTableName, DataTable dt)
        {
            try
            {
                string oradb = "Data Source=(DESCRIPTION= (ADDRESS=(PROTOCOL=TCP)(HOST=000.00.00.00)(PORT=0000)) (CONNECT_DATA =(SID=XX))); User Id=XXX;Password=xxxxxxx;";
                using (var connection = new OracleConnection(oradb))
                {
                    connection.Open();
                    Console.WriteLine("Connected to Oracle Database {0}", connection.ServerVersion);
                    Console.WriteLine("Press RETURN to exit.");
                    Console.ReadLine();

                    using (var bulkCopy = new OracleBulkCopy(connection, OracleBulkCopyOptions.UseInternalTransaction))
                    {
                        bulkCopy.DestinationTableName = destTableName;
                        bulkCopy.BulkCopyTimeout = 600;
                        bulkCopy.WriteToServer(dt);
                    }
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }   

    }
}

Richard MacCutchan

Сообщение совершенно ясно, вам не хватает компонента библиотеки Oracle.

Nutan R

Правда. Я нашел лучший подход в https://stackoverflow.com/questions/33509331/oracle-dataaccess-client-dependencies