Сценарий задачи вызывает ошибки кодирования при загрузке CSV в БД - PullRequest
0 голосов
/ 06 апреля 2020

Я выполнил задачу сценария, чтобы автоматизировать процесс загрузки и создания таблиц в моей базе данных. Проблема в том, что данные на португальском языке, и когда я загружаю данные в БД, я получаю неизвестные символы вместо слов с ударениями (поле GBEDDMOV).

GBEDNOPR;GBEDSEQMV;GBEDNCLI;GBEDNATR;GBEDNSEQ;GBEDBALC;GBEDCCB;GBEDVALOR;GBEDMOEDA;GBEDDATVL;GBEDDMOV
592828100;10;0;0;0;254;10010000.0;1340.0;EUR;0001-01-01;Saída para um caixa (notas)
592828100;20;0;0;0;254;10020000.0;46.4;EUR;0001-01-01;Saída para um caixa (moedas)
592828108;10;0;0;0;254;10030000.0;3.0;USD;0001-01-01;Saída para um caixa
592828218;10;0;0;0;223;10010000.0;650.0;EUR;0001-01-01;Saída para um caixa (notas)
592828218;20;0;0;0;223;10020000.0;57.68;EUR;0001-01-01;Saída para um caixa (moedas)
592828231;10;0;0;0;223;10030000.0;3.0;USD;0001-01-01;Saída para um caixa
592828347;10;0;0;0;147;10010000.0;435.0;EUR;0001-01-01;Saída para um caixa (notas)
592828347;20;0;0;0;147;10020000.0;46.73;EUR;0001-01-01;Saída para um caixa (moedas)
592828355;10;0;0;0;147;10030000.0;3.0;USD;0001-01-01;Saída para um caixa
592828363;10;0;0;0;38;10010000.0;1195.0;EUR;0001-01-01;Saída para um caixa (notas)
592828363;20;0;0;0;38;10020000.0;120.89;EUR;0001-01-01;Saída para um caixa (moedas)
592828375;10;0;0;0;38;10030000.0;3.0;USD;0001-01-01;Saída para um caixa

Я пытался изменить кодировку на ISO 8859-1 в Notepad ++, но это не сработало.

data on DB

Любые подсказки о как это решить?

Используемый скрипт:

public void Main(){
        // TODO: Add your code here
        string datetime = DateTime.Now.ToString("yyyy_MM_dd_HH_mm");
        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 ArchiveFolder = Dts.Variables["User::ArchiveFolder"].Value.ToString();
            string ColumnsDataType = Dts.Variables["User::ColumnsDataType"].Value.ToString();
            string FileConnectionManager = Dts.Variables["User::FileConnectionManager"].Value.ToString();

            // We can add a Schema Name to our tables (Ex: if we pick "STG" the table name will be STG.table_name)
            //string SchemaName = Dts.Variables["User::SchemaName"].Value.ToString();
            //string ColumnList = "";

            SqlConnection myADONETConnection = new SqlConnection();

            myADONETConnection = (SqlConnection) (Dts.Connections[FileConnectionManager].AcquireConnection(Dts.Transaction) as SqlConnection);

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


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

                System.IO.StreamReader SourceFile =
                new System.IO.StreamReader(fileName);
                while ((line = SourceFile.ReadLine()) != null)
                {
                    if (counter == 0)
                    {                         
                        ColumnList = "[" + line.Replace(FileDelimiter, "],[") + "]";
                        TableName = (((fileName.Replace(SourceFolderPath, "")).Replace(FileExtension, "")).Replace("\\", ""));
                        MessageBox.Show("name = '"+TableName+"'");
                        string CreateTableStatement = "IF EXISTS (SELECT * FROM sys.objects WHERE name = '"+TableName+"')";
                        CreateTableStatement += " DROP TABLE " + TableName;
                        CreateTableStatement += " CREATE TABLE " + TableName;                          
                        CreateTableStatement += "([" + line.Replace(FileDelimiter, "] " + ColumnsDataType + ",[") + "] " + ColumnsDataType + ")";
                        SqlCommand CreateTableCmd = new SqlCommand(CreateTableStatement, myADONETConnection);
                        CreateTableCmd.ExecuteNonQuery();
                        //MessageBox.Show(CreateTableStatement);

                    }
                    else
                    {
                        string query = "Insert into dbo.[" + TableName + "] (" + ColumnList + ") ";
                        query += "VALUES('" + line.Replace(FileDelimiter, "','") + "')";

                        //MessageBox.Show(query.ToString());
                        SqlCommand myCommand1 = new SqlCommand(query, myADONETConnection);
                        myCommand1.ExecuteNonQuery();
                    }

                    counter++;
                }

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

        }
    }

Описание таблицы:

GBEDNOPR    varchar(255)    Checked
GBEDSEQMV   varchar(255)    Checked
GBEDNCLI    varchar(255)    Checked
GBEDNATR    varchar(255)    Checked
GBEDNSEQ    varchar(255)    Checked
GBEDBALC    varchar(255)    Checked
GBEDCCB     varchar(255)    Checked
GBEDVALOR   varchar(255)    Checked
GBEDMOEDA   varchar(255)    Checked
GBEDDATVL   varchar(255)    Checked
GBEDDMOV    varchar(255)    Checked
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...