如何以编程方式将Excel文档导入到Azure SQL表中?

我们的ASP.NET Web应用程序允许用户从Excel导入数据。 我们目前托pipe在我们自己的服务器上,所以可以从Web服务器和SQL服务器访问文件系统。 目前的过程如下所示:

  1. 将上传的文件保存到服务器的临时文件夹
  2. 执行T-SQL,通过OLEDB直接从文件系统读取上传的文件到SQL临时表
  3. 执行T-SQL以根据需要从临时表中读取数据并进行处理(例如,与现有数据进行比较,并根据需要更新/插入)

第2步看起来像这样:

Select * into #MY_TEMP_TABLE From OpenRowSet( 'Microsoft.ACE.OLEDB.12.0', 'Excel 12.0; Database=PATH_TO_MY_UPLOADED_FILE; HDR=YES', 'Select * From MY_WORKSHEET_NAME%') 

与(例如)使用EPPlus将文件读取到.NET中的数据表中,然后逐行插入数据相比,这是非常快速和直接的。

我们正在开发Azure应用程序(Azure网站和SQL数据库,而不是VM)。 我们可以将file upload到blob存储,并将其内容存入一个字节数组,但是我们仍然坚持逐行处理的方法,这个方法很慢,很脆弱。

有没有一种快速的方式来以编程方式批量上传到SQL Azure中的SQL?

我会看像ComponentOne之类的商业Excel组件之一。 将电子表格的内容读取到内存中,并使用标准的ADO.Net技术将其写入Azure SQL数据库。

这可能会更可靠,你可以利用重试逻辑的瞬态故障( http://www.asp.net/aspnet/overview/developing-apps-with-windows-azure/building-real-world-cloud-apps-带有windows-azure / transient-fault-handling )。

请注意,您需要了解Azure SQL数据库中的限制行为,以及它如何影响您的应用程序: http : //msdn.microsoft.com/en-us/library/azure/dn338079.aspx