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

时间:2014-09-06 15:20:30

标签: c# asp.net excel azure azure-sql-database

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

  1. 将上传的文件保存到服务器上的临时文件夹
  2. 执行T-SQL直接从文件系统将上传的文件读取到通过OLEDB的SQL临时表
  3. 执行T-SQL以从临时表中读取数据并根据需要进行处理(例如,与现有数据进行比较并根据需要进行更新/插入)
  4. 第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)。我们可以将文件上传到blob存储并将其内容转换为字节数组,但是我们仍然坚持逐行处理方法,这种方法既缓慢又脆弱。

    有没有一种快速的方法可以通过编程方式将Excel批量上传到SQL?

1 个答案:

答案 0 :(得分:1)

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

这可能更可靠,您可以将重试逻辑用于瞬态失败(http://www.asp.net/aspnet/overview/developing-apps-with-windows-azure/building-real-world-cloud-apps-with-windows-azure/transient-fault-handling)。

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