代码改变世界

asp.net本地读取excel正确。但在iis服务器上就报错 未在本地计算机上注册“Microsoft.ACE.OleDb.12.0”提供程序

  糯米粥  阅读(2214)  评论(0编辑  收藏  举报

本地vs2010可以上传ecxel文件。并读取数据,但部署到本地IIS。并访问。则提示: 未在本地计算机上注册“Microsoft.ACE.OleDb.12.0”提供程序

首先:确保安装了Microsoft.ACE.OLEDB.12.0驱动 下载地址:http://pan.baidu.com/s/1moWje


其次。如果你跟我一样。本地vs2010测试成功。但在本地iis访问就报错(未在本地计算机上注册“Microsoft.ACE.OleDb.12.0”提供程序)


那你可以在你的iis中修该(win7电脑:应用程序池 ------>选择高级设置 --------->启用32位应用程序  ------->true )

 

 

 

当然如果你项目部署到外网了。服务器一般都是windows 2003 本地你也要安装Microsoft.ACE.OLEDB.12.0驱动。如果还是报错

则你要修改: 将IIS应用程序池里的预定义账户改为本地系统

 

这样设置后。应该就没什么问题了

最后附上读取excel文件的代码

复制代码
 /// <summary>
        /// 获取Excel
        /// </summary>
        /// <param name="fileName">读取的文件路径</param>
        /// <returns></returns>
        private DataTable getTable(string fileName)
        {
            try
            {
                //判断文件是否存在
                if (!File.Exists(fileName)) { Response.Write("<script>alert('文件不存在,请重新上传。');</script>"); return null; }


                DataSet ds = new DataSet();
                OleDbConnection objConn = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + fileName + ";" + "Extended Properties='Excel 8.0;IMEX=1'"); //Excel 8.0;HDR=NO;IMEX=1中的IMEX=0;
                objConn.Open();
                DataTable schemaTable = objConn.GetOleDbSchemaTable(System.Data.OleDb.OleDbSchemaGuid.Tables, null);

                string tableName = schemaTable.Rows[0][2].ToString().Trim();//获取 Excel 的表名,默认值是sheet1

                //string queryField = "型号,品牌,封装,年份,包装,数量,单价,订货周期,备注";
                //string strSql = "select " + queryField + " from [" + tableName + "]";

                string strSql = "select * from [" + tableName + "]";
                //string strSql = "select * from [" + tableName + "]";

                OleDbCommand objCmd = new OleDbCommand(strSql, objConn);
                OleDbDataAdapter myData = new OleDbDataAdapter(strSql, objConn);
                myData.Fill(ds, tableName);//填充数据
                return ds.Tables[0];
            }
            catch (Exception ex)
            {
                //获取文件名
                string fName = fileName.Substring(fileName.LastIndexOf("\\") + 1);
                //MessageBox.Show(ex.Message);
                return null;
            }
        }
复制代码

 http://windowsclient.net/

编辑推荐:
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
'
点击右上角即可分享
微信分享提示