日期:2014-05-18  浏览次数:20841 次

c#读取excel到dataset产生:未指定的错误 异常!

我用单例构造了一个读取excel到dataset的类。CExcelHelper,类里面提供如下读取excel到dataset的方法

C# code


 /// <summary>
        /// 将excel中指定sheet内容读入dataset
        /// </summary>
        /// <param name="fileName">excel文件路径</param>
        /// <param name="sheetNames">需从excel中读取的sheet名称</param>
        /// <returns></returns>
        public DataSet TransExcelToDataSet(string fileName, List<string> sheetNames)
        {
            OleDbConnection objConn = null;
            DataSet data = new DataSet();

            try
            {
                //创建读取excel连接
                string strConn = "Provider=Microsoft.Jet.OleDb.4.0;" + "data source=" + fileName 
                    + ";Extended Properties='Excel 8.0; HDR=YES; IMEX=1'";
                objConn = new OleDbConnection(strConn);
                objConn.Open();
                OleDbDataAdapter sqlada = new OleDbDataAdapter();
                //遍历从配置文件中读取的sheet名称
                foreach (string sheetName in sheetNames)
                {
                    string strSql = "select * From [" + sheetName.Trim() + "$]";
                    OleDbCommand objCmd = new OleDbCommand(strSql, objConn);
                    sqlada.SelectCommand = objCmd;
                    //填充dataset
                    sqlada.Fill(data, sheetName);
                }
            }
            catch (Exception e)
            {
                throw new Exception("将excel中指定sheet内容读入dataset出错!"+e.Message);
            }
            finally
            {
                if (objConn != null)
                {
                    objConn.Dispose();
                    objConn.Close();
                }
            }
            return data;
        }





在本机使用vs自带开发服务器下,能正常操作。但是发布后放到本机IIS里,就抛出异常。
excel所在目录我已经给了everyone完全控制权限,仍然有异常。
异常信息为: 未指定的错误。


求指点。
在线等。



------解决方案--------------------
你的 服务器是64位的还是32位的?
 string strConn = "Provider=Microsoft.Jet.OleDb.4.0;" + "data source=" + fileName 
+ ";Extended Properties='Excel 8.0; HDR=YES; IMEX=1'";

把里面的空格都去掉

 string strConn = "Provider=Microsoft.Jet.OleDb.4.0;" + "data source=" + fileName 
+ ";Extended Properties='Excel 8.0;HDR=Yes;IMEX=1'";

------解决方案--------------------
服务器端要装EXCEL。
版本也要统一。
最好和你开发环境装的一样。
------解决方案--------------------
好像要在服务器上设置COM+,用excel做后台比较麻烦,lz搜一下和“元件服务”有关~
------解决方案--------------------
以前遇到很多次了
如果你把文件路径写死之后还有这个VS开发可以IIS发布不行的问题就应该是权限配置的问题。
在服务器上进行设置
打开 控制面板->管理工具->组件服务->计算机->我的电脑->DECOM配置
找到Microsoft Excel 应用程序 进行权限配置主要是安全标签和标识标签。安全标签3个选项都是用自定义将与IIS有关的两个用户(已IIS开头)加入,标识标签选为交互式。
看看有没有Microsoft Excel Sheet 应用程序也需要做相同的配置不然还是会报权限错误。
------解决方案--------------------
把你代码复制过来,运行了下没有问题! 我用的是IIS6.0

------解决方案--------------------
LZ 百度 Aspose.Cells.dll 这个插件,还有 LS 的各位同胞,这个插件能解决你们的问题哦,
------解决方案--------------------
vs2008?这是一个常见的问题,微软兼容性导致的bug,根本无法解决
你调试就知道了肯定是objConn.Open();这条出错!!
变通方法有两种
1、在服务器端写读好数据
2、将此excel用System.Diagnostics.Process.Start()打开,再进行读取操作
------解决方案--------------------