使用BULK INSERT将CSV数据插入SQL Server表

时间:2019-07-01 22:26:34

标签: c# sql-server

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

0 个答案:

没有答案