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; } }