我的最终目标是获取一个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#的新手,所以如果我以完全错误的方式进行操作,请告诉我。