Asp.net 网页 (razor) 页将 Excel 数据导入 SQL Server 2014 表

本文关键字:导入 数据 SQL Server 2014 Excel 页将 网页 net razor Asp | 更新日期: 2023-09-27 18:32:53

背景:我在 2008R2 Web 服务器上有一个 asp.net 网页 (razor( 应用程序,该应用程序有一个带有 excel 上传按钮的页面,允许用户将 excel 数据发布到 SQL Server 2014 表中。为了使它在开发服务器上工作,我必须安装Microsoft Access Database Engine 2010,如这篇MikesDotNetting博客文章中所述。但是,有人鼓励我找到一种将数据导入生产服务器的方法,该方法不需要在服务器上安装 Access 数据库引擎Microsoft。我有一个 C# Windows 窗体应用程序可以执行相同的操作,但我不擅长将 Windows 窗体应用程序代码转换为我的 razor 网站。

我实际上没想到下面的这段代码会起作用,因为我将数据发布到 SQL Server 2014,并且根据 MS OleDB 已被弃用,并且自 SQL Server 2012 以来一直不受支持。

Q1 - 弃用是否意味着"使用风险自负",还是意味着它根本不应该在 2014 上工作?

下面的代码(发生在我之后...ISPOST(非常适合将excel文件上传到我的Web服务器,然后插入到SQL Server 2014表中。我只需要找到一种方法来使其工作,而无需将Microsoft Access 数据库引擎安装到生产服务器 2008 R2 IIS7。

问题 2 - 是否有一些 Nuget 包或其他解决方法可能会有所帮助?

问题 3 - 是否有将 OLE DB 连接字符串转换为 ODBC 的快速修复方法?

Q4 - 是否有一个命名空间/程序集可以添加到项目中,而不需要在服务器上安装 Access 数据库引擎?

法典:

try
                {
                    // import code
                    var excel = Request.Files[0];
                    var file = Path.Combine(Server.MapPath("~/Upload_Folder/"), excel.FileName);
                    excel.SaveAs(file);
                    var excelConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties='"Excel 12.0 Xml;HDR=Yes;IMEX=1'"";
                    var sqlConnectionString = ConfigurationManager.ConnectionStrings["MYCONNECTIONSTRING"].ToString();
                    var excelData = new DataTable();
                    using (var myConnection = new OleDbConnection(string.Format(excelConnectionString, file)))
                    {
                        var myCommand = new OleDbCommand("SELECT * FROM [Sheet1$]", myConnection);
                        var myAdapter = new OleDbDataAdapter(myCommand);
                        myAdapter.Fill(excelData);
                        using (var destinationConnection = new SqlConnection(sqlConnectionString))
                        {
                            destinationConnection.Open();
                            using (var bulkCopy = new SqlBulkCopy(destinationConnection))
                            {
                                bulkCopy.DestinationTableName = "MYTABLE";
                                bulkCopy.ColumnMappings.Add("CODE", "code");
                                bulkCopy.ColumnMappings.Add("TITLE", "title");                                   
                                bulkCopy.ColumnMappings.Add("LAST_NAME", "last_name");
                                bulkCopy.ColumnMappings.Add("FIRST_NAME", "first_name");
                            }
                        }
                        if (Directory.Exists(Path.GetDirectoryName(file)))
                        {
                            File.Delete(file);
                        }
                    }
                }
                catch (Exception ex)
                {
                    throw ex;
                }

Asp.net 网页 (razor) 页将 Excel 数据导入 SQL Server 2014 表

经过近 50 次浏览后,我没有得到对这个问题的任何回应,这让我觉得这是一个有许多不同的解决方案的问题。但是,为了使它尽可能有用,我只想记录我自己的解决方案(带有链接(到提出的 4 个原始问题(见上面的评论 1-4(。--提姆