使用IIS应用程序池将Excel导入SQL时出现问题

使用IIS应用程序池将Excel导入SQL时出现问题,excel,iis,Excel,Iis,我在asp.net中编写了一个web应用程序,它将数据从excel电子表格导入SQL(代码如下)。如果我在本地机器上使用IIS Express从VS运行它,它可以正常工作。然而,当我在Azure web服务器上将其作为web应用程序部署为IIS应用程序池时,它只是从excel导入了部分数据(73000行中有16250行)。我将应用程序池设置为启用32位应用程序(该服务器上的microsoft.ace.oledb库为32位)。我找到了它在SQL中加载的最后一条记录(它只加载了部分行),并将其移动到

我在asp.net中编写了一个web应用程序,它将数据从excel电子表格导入SQL(代码如下)。如果我在本地机器上使用IIS Express从VS运行它,它可以正常工作。然而,当我在Azure web服务器上将其作为web应用程序部署为IIS应用程序池时,它只是从excel导入了部分数据(73000行中有16250行)。我将应用程序池设置为启用32位应用程序(该服务器上的microsoft.ace.oledb库为32位)。我找到了它在SQL中加载的最后一条记录(它只加载了部分行),并将其移动到excel电子表格的顶部并重新导入。该记录这次导入得很好,但仍然只部分导入到SQL中(这次是16219行)。所以看起来数据是正常的,但我不明白为什么它没有加载所有数据。我在运行进程时没有收到任何错误

代码:


从您提供的代码中,很难看出问题所在。包括您对问题的描述,应用程序本身不会报告错误,并且不容易找到问题的原因。我建议您使用调试诊断工具获取应用程序池的转储信息,然后分析数据以找出问题所在。您可以尝试插入一个数据较少的excel文件和一个较小的文件,以查看是否存在相同的问题。是的,我尝试了一个较小的excel文件,效果很好。这似乎表明服务器/应用程序池设置上存在某种类型的问题?我正在联系我们的云架构师,看看他是否能够跟踪正在发生的事情。我认为这可能是服务器性能问题。如果您的云架构师找到了解决方案,您可以发布它。
       string excelstring = "provider=microsoft.ace.oledb.16.0;data source=" + rptpath + filename +
                              ";extended properties=" + "\"excel 12.0;hdr=yes;\"";


        try
        {
            OleDbConnection oledbconnection = new OleDbConnection();
            oledbconnection.ConnectionString = excelstring;
            oledbconnection.Open();

            DataTable dtSheet = oledbconnection.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);
            foreach (DataRow drSheet in dtSheet.Rows)
            {
                sheetname = drSheet["TABLE_NAME"].ToString();
            }

            sqlstring = "SELECT * FROM [" + sheetname + "]";

            OleDbCommand oledbcommand = new OleDbCommand(sqlstring, oledbconnection);
            oledbcommand.CommandTimeout = 240;
            DbDataReader dr = oledbcommand.ExecuteReader();
            SqlBulkCopy bulkInsert = new SqlBulkCopy(connsql);
            bulkInsert.DestinationTableName = tablename;
            bulkInsert.BulkCopyTimeout = 240;

            bulkInsert.WriteToServer(dr);

            oledbconnection.Close();

        }
        catch (Exception Ex)
        {
            ClientScript.RegisterStartupScript(GetType(), "showError", "alert('" + Ex.Message + "');", true);
            errormessage = Ex.Message;
            return "error";
        }