Member 12785171 Ответов: 1

Как читать REQ файлы без столбца заголовка в C#


У меня есть этот код консольного приложения c# для чтения файлов REQ из папки, и он работает со столбцом заголовка ,но мой файл REQ без столбца заголовка это, например, то, что я имею в виду :
123123*JAN*100001*ssssss_jan@gmail.com*CREDITADVICE*SDG*1000000*20170620*F0000999*10.105.1.20


это код:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;
using System.Data.SqlClient;
using System.Data;


namespace readREQ
{
    class Program
    {
        static void Main(string[] args)
        {

            string datetime = DateTime.Now.ToString("yyyyMMddHHmmss");
            string LogFolder = @"C:\Log\";
            try
            {

                //Declare Variables and provide values
                string SourceFolderPath = @"C:\Source\"; //Provide the Source Folder where files are present
                string FileExtension = ".txt"; //Provide the extension of files you need to load, can be .txt or .csv
                string FileDelimiter = ","; // provide the file delimiter such as comma or pipe
                string ArchiveFolder = @"C:\Archive\"; //Provide the archive folder path where files will be moved
                string TableName = "dbo.Customer"; //Provide the table name in which you would like to load the files.


                //Create Connection to SQL Server in which you like to load files
                SqlConnection SQLConnection = new SqlConnection();
                    SQLConnection.ConnectionString = "Data Source = (local); Initial Catalog =TechBrothersIT; "
                       + "Integrated Security=true;";

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

                    //Writing Data of File Into Table
                    int counter = 0;
                    string line;
                    string ColumnList = "";

                    System.IO.StreamReader SourceFile =
                    new System.IO.StreamReader(fileName);
                    SQLConnection.Open();
                    while ((line = SourceFile.ReadLine()) != null)
                    {
                        if (counter == 0)
                        {
                            //By using Header Row, Build Column List
                            ColumnList = "[" + line.Replace(FileDelimiter, "],[") + "]";

                        }
                        else
                        {

                            //Build and Execute Insert Statement to insert record
                            string query = "Insert into " + TableName + " (" + ColumnList + ") ";
                            query += "VALUES('" + line.Replace(FileDelimiter, "','") + "')";

                            SqlCommand SQLCmd = new SqlCommand(query, SQLConnection);
                            SQLCmd.ExecuteNonQuery();
                        }

                        counter++;
                    }

                    SourceFile.Close();
                    SQLConnection.Close();
                    //move the file to archive folder after adding datetime to it
                    File.Move(fileName, ArchiveFolder + "\\" + 
                        (fileName.Replace(SourceFolderPath, "")).Replace(FileExtension, "")
                        + "_" + datetime + FileExtension);                   
                }
            }
            catch (Exception exception)
            {
                // Create Log File for Errors
                using (StreamWriter sw = File.CreateText(LogFolder
                    + "\\" + "ErrorLog_" + datetime + ".log"))
                {
                    sw.WriteLine(exception.ToString());
                   
                }

            }

        }
    }
}


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

У меня есть попытка удалить эти строки
if (counter == 0)
                        {
                            //By using Header Row, Build Column List
                            ColumnList = "[" + line.Replace(FileDelimiter, "],[") + "]";

                        }

но все же есть ошибка

1 Ответов

Рейтинг:
1

Wendelius

Насколько я вижу, код опирается на тот факт, что:
- файл имеет строку заголовка
- заголовки в файле совпадают с именами столбцов целевой таблицы

Таким образом, простое удаление чтения строки заголовка не работает, так как нет никакой информации, в какие столбцы должны быть вставлены данные.

Возможно, вы могли бы исправить имена столбцов в команде INSERT, а затем извлечь соответствующие значения в инструкцию INSERT. Поскольку я не знаю логики этих файлов, единственное предположение, которое я могу сделать, заключается в том, что, возможно, порядок столбцов данных в файле известен, и вы можете использовать эту информацию для сопоставления столбцов в базе данных.

Кроме того, вы столкнетесь с проблемами, если не будете использовать параметры в своих командах SQL. Например, персонаж ' в данных будет нарушен ваш SQL-оператор. Взгляните на Правильное выполнение операций с базой данных[^]