Загрузка нескольких файлов из папки в таблицу sql - производительность слишком низкая - PullRequest
0 голосов
/ 24 апреля 2020

У меня проблемы со следующим кодом (задача «Сценарий» в службах SSIS), который загружает данные из нескольких CSV-файлов в таблицу sql. Я получил код с сайта, и он работает, но он чертовски медленен ...

Мне нужен кто-то, кто поможет мне оптимизировать этот код, чтобы он работал быстрее, поскольку в настоящее время он импортирует со скоростью 1 миллион записей в час ...

string datetime = DateTime.Now.ToString("yyyyMMddHHmmss");
        try
        {

            //Declare Variables
            string SourceFolderPath = Dts.Variables["User::SourceFolder"].Value.ToString();
            string FileExtension = Dts.Variables["User::FileExtension"].Value.ToString();
            string FileDelimiter = Dts.Variables["User::FileDelimiter"].Value.ToString();
            string TableName = Dts.Variables["User::DestinationTable"].Value.ToString();
            string ArchiveFolder = Dts.Variables["User::ArchiveFolder"].Value.ToString();
            //string ColumnList = "";

            //Reading file names one by one
            string SourceDirectory = SourceFolderPath;
            string[] fileEntries = Directory.GetFiles(SourceDirectory, "*" + FileExtension);
            foreach (string fileName in fileEntries)
            {

                SqlConnection myADONETConnection = new SqlConnection();
                myADONETConnection = (SqlConnection)
                (Dts.Connections["hiddenoninternet"].AcquireConnection(Dts.Transaction) as SqlConnection);

                //Writing Data of File Into Table
                int counter = 0;
                string line;
                //MessageBox.Show(fileName);

                System.IO.StreamReader SourceFile =
                new System.IO.StreamReader(fileName);
                while ((line = SourceFile.ReadLine()) != null)
                {
                    if (counter > 0)
                    {

                        string query = "Insert into " + TableName + " Values ('";
                        query += line.Replace(FileDelimiter, "','") + "','" + fileName + "')";
                        //MessageBox.Show(query.ToString());
                        SqlCommand myCommand1 = new SqlCommand(query, myADONETConnection);
                        myCommand1.ExecuteNonQuery();
                    }

                    counter++;
                }

                SourceFile.Close();
                //move the file to archive folder after adding datetime to it
                File.Move(fileName, ArchiveFolder + "\\" + (fileName.Replace(SourceFolderPath, "")).Replace(FileExtension, "") + "_" + datetime + FileExtension);
                Dts.TaskResult = (int)ScriptResults.Success;
            }
        }
        catch (Exception exception)
        {
            // Create Log File for Errors
            using (StreamWriter sw = File.CreateText(Dts.Variables["User::LogFolder"].Value.ToString()
                + "\\" + "ErrorLog_" + datetime + ".log"))
            {
                sw.WriteLine(exception.ToString());
                Dts.TaskResult = (int)ScriptResults.Failure;
            }

        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...