Моя конечная цель - взять CSV-файл и вставить все строки в существующую таблицу SQL.
В настоящее время пользователь загружает файл csv в мое веб-приложение, которое отправляет данные в виде данных формы.
Это мой контроллер, который превращает CSV-файл в байты. Это работает правильно.
[HttpPost("UploadInvoice")]
public async Task<object> UploadInvoice()
{
var form = Request.ReadFormAsync().Result;
var csvFile = form.Files[0];
using (var stream = csvFile.OpenReadStream())
{
var bytes = new byte[stream.Length];
stream.Read(bytes, 0, bytes.Length);
var str = await data.Finance.UploadInvoice(bytes);
return new { Request = str };
}
}
Это мой модуль, который принимает байты в качестве параметров и должен вставлять данные, но не добавляет их.
public async Task<object> UploadInvoice(byte[] bytes)
{
var dt = new DataTable();
dt.Columns.Add("Data", typeof(Byte[]));
for (var i = 1; i < 1000000; i++)
dt.Rows.Add(i + 1, "Data " + i + 1);
using (var connection = new SqlConnection(ConnectionString.SQL08R2.ToString()))
{
connection.Open();
var transaction = connection.BeginTransaction();
using (var sqlBulk = new SqlBulkCopy(connection, SqlBulkCopyOptions.KeepIdentity, transaction))
{
sqlBulk.DestinationTableName = "Distribution.dbo.fedex_uploaded_invoice";
sqlBulk.WriteToServer(dt);
}
}
return await SqlConnector.ExecuteAsync<InvoiceModel>(ConnectionString.SQL08R2, null, null);
}
}
Нет сообщений об ошибках, просто не вставлены строки. Я знаю, что массовая вставка обычно не используется с параметрами, и это кажется обходным решением. Я очень новичок в C #, так что, если я пойду совершенно неправильно, пожалуйста, дайте мне знать.