首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

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

2012-06-21 
c#读取excel到dataset产生:未指定的错误 异常!我用单例构造了一个读取excel到dataset的类。CExcelHelper,类

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()打开,再进行读取操作
[解决办法]


异常信息如下:
将excel中指定sheet内容读入dataset出错!
未指定的错误
fileName: D:\Project\ReportHBSys资料\Publish\DataReceive\RelationData\ImportRelationData\012\201010\核销报表.xls ; sheetName:

(1)把路径中所有的中文去掉。没看到你的filename怎么来的,如果用户上传的,并通过QueryString这样的URL部分进行传输,要进行编码,以避免#这样的符号以及一些中文不能被正确处理。
(2)在IIS中设置应用程序池用户凭据为System试试,以确认是否权限问题。除了文件权限,使用OLE数据引擎,也需要权限。若IIS没有应用程序池,就将ASPNET账号设为管理员组。
[解决办法]
我遇到过一个问题,我的Excel 是从管家婆软件中导出来的,在导入SQL Server 2005 时,导入失败,必须打开再保存一次。才能够正常导入。不知道对你有没有帮助。


C# code
    public DataSet GetUserInfoFromExcel(out string ErrMsg)        {            try            {                ErrMsg = "";                OpenFileDialog openFileDialog = new OpenFileDialog();                openFileDialog.Filter = "Excel files(*.xls)|*.xls";                string conn = Global.g_SqlConnStr;//数据库联接字符串                if (openFileDialog.ShowDialog() == DialogResult.OK)                {                    FileInfo fileInfo = new FileInfo(openFileDialog.FileName);                    string filePath = fileInfo.FullName;//获取所打开的文件的全路径                    //判断当前Excel是否是员工信息的Excel                    if (!fileInfo.Name.Contains("内部职员数据"))                    {                        MessageBox.Show("当前选择的Excel文件不是员工信息文件");                        return;                    }                    string connExcel = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + filePath + ";Extended Properties='Excel 8.0;HDR=Yes;IMEX=1'";                                            #region 解决管家导出的excel数据必须打开再保存才能导入的问题                        //创建Application对象                         Microsoft.Office.Interop.Excel.Application xApp = new Microsoft.Office.Interop.Excel.ApplicationClass();                        //xApp.Visible = true;                        //得到WorkBook对象, 可以用两种方式之一: 下面的是打开已有的文件                         Microsoft.Office.Interop.Excel.Workbook xBook = xApp.Workbooks._Open(filePath,                        Missing.Value, Missing.Value, Missing.Value, Missing.Value                        , Missing.Value, Missing.Value, Missing.Value, Missing.Value                        , Missing.Value, Missing.Value, Missing.Value, Missing.Value);                        Microsoft.Office.Interop.Excel.Worksheet xSheet = (Microsoft.Office.Interop.Excel.Worksheet)xBook.Sheets[1];                        //保存方式一:保存WorkBook                         //xBook.SaveAs(filePath,                        //Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value,                        //Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlNoChange, Missing.Value, Missing.Value, Missing.Value,                        //Missing.Value, Missing.Value);                        //xSheet = null;                        string sheetname = "";                        sheetname = xSheet.Name.Trim() + "$";                        xBook = null;                        xApp.Quit(); //这一句是非常重要的,否则Excel对象不能从内存中退出                         xApp = null;                        #endregion                        OleDbConnection oleDbConnection = new OleDbConnection(connExcel);                        oleDbConnection.Open();//打开数据库连接                        //获取excel表                        System.Data.DataTable dataTable = oleDbConnection.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);                        //获取sheet名,其中[0][1]...[N]: 按名称排列的表单元素                        //string tableName = dataTable.Rows[0][2].ToString().Trim();                        string tableName = sheetname.Trim();                        tableName = "[" + tableName.Replace("'", "") + "]";                        //利用SQL语句从Excel文件里获取数据                        string query = "SELECT * FROM " + tableName;                        DataSet dataSet = new DataSet();                        OleDbDataAdapter oleAdapter = new OleDbDataAdapter(query, connExcel);                        oleAdapter.Fill(dataSet, "Employee_Info");return dataSet;}      }            catch (Exception ex)            {                ErrMsg = ex.Message;            }        } 

热点排行