Мне нужна функция, которая читает файлы 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