Функция Azure для анализа CSV с FTP и сохранения его в базе данных SQL Azure. - PullRequest
0 голосов
/ 03 июля 2019

Мне нужна функция, которая читает файлы csv из источника FTP и вставляет содержимое файла (включая новый столбец, содержащий имя файла в строках файла) в указанную таблицу в БД SQL Azure

Iудалось прочитать содержимое файла CSV в виде строки, и смог вставить его в таблицу в виде строки для всей строки.но я хотел бы знать, как я могу проанализировать строку CSV или прочитать файл csv через функцию azure как кадр таблицы (например).Я заметил, что библиотека для чтения и анализа CSV Microsoft.VisualBasic.IO недоступна в функциях Azure V.2 .NET CORE (ранее была доступна в V.1 .NET FRAMEWORK)



#r "Newtonsoft.Json"
#r "System.Data"


using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using System.Collections.Generic;
using System.Globalization;
using System;
using System.Configuration;
using System.Data;
using System.Data.SqlClient;
using System;
using System.IO;
using System.Net;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Primitives;
using Newtonsoft.Json;
using FluentFTP;
using System.Linq;
using System.Text;






public static async Task<IActionResult> Run(HttpRequest req, ILogger log)

{
    using (FtpClient conn = new FtpClient()) 
        {
            conn.Host = "ftpLink";
            conn.Credentials = new NetworkCredential("username", "pass");

            //SQL connection
            var connectionstring = Environment.GetEnvironmentVariable("sqldb_connection");



            // get a list of files and directories in the "/OUT" folder
            foreach (FtpListItem item in conn.GetListing("/OUT")) 
                {

            // if this is a file and ends with CSV
                    if (
                    item.Type == FtpFileSystemObjectType.File
                    &&
                    item.FullName.ToLower().EndsWith(".csv")
                    )
                    {

                        //log.LogInformation(item.FullName);


                        var ftpUserName = "username";
                        var ftpPassword = "pass";
                        var filename = "/out/"+ item.Name;
                        string delimiter = ";";
                        DataTable dt = new DataTable();

                        FtpWebRequest fileRequest = (FtpWebRequest)WebRequest.Create("ftp://link" + filename);
                        fileRequest.Method = WebRequestMethods.Ftp.DownloadFile;
                        fileRequest.Credentials = new NetworkCredential(ftpUserName, ftpPassword);

                        WebClient client = new WebClient();
                        client.Credentials = new NetworkCredential(ftpUserName, ftpPassword );




                        using (SqlConnection SQLcon = new SqlConnection(connectionstring))

                        {
                            if (SQLcon.State == ConnectionState.Closed)
                                SQLcon.Open();
                                SqlCommand cmd = new SqlCommand();
                                cmd.Connection = SQLcon;
                                cmd.CommandType = CommandType.Text;
                                SqlDataReader reader;
                            try
                                {
                                // that reads the file content as string
                                    byte[] newFileData = client.DownloadData("ftp://ftplink" + filename);
                                    string fileString = System.Text.Encoding.UTF8.GetString(newFileData);

                                    string query = $"INSERT INTO [brt].[record] ([record_string]) VALUES ('{fileString}')";
                                    cmd.CommandText = query;
                                    reader = cmd.ExecuteReader();

                                    log.LogInformation(fileString);
                                }

                            catch (WebException e)
                                {
                                    log.LogInformation(item.FullName);
                                } 

                        }   

                    }


                }
            return new OkObjectResult($"Hello");
        }
}

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

column1          column2          column3          column4          filename

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