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()打开,再进行读取操作
------解决方案--------------------