日期:2014-05-17  浏览次数:20793 次

c#访问Excel问题
我有一个用于数据导入的页面,功能是由用户上传一个excel文件,将内容导入到数据库中,程序运行一切正常。
但是现在每隔一两天都会出现一次问题:
未指定的错误 在 System.Data.OleDb.OleDbConnectionInternal..ctor(OleDbConnectionString constr, OleDbConnection connection)

这时重启一次IIS后就会好起来了,推测可能是读入数据后没有释放完资源导致的,但是自我感觉已经把该释放的都释放了。
下面是读取excel文件的代码:
C# code

// excelDB 是Excel文件名
DataSet ds = new DataSet();
string strCon = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + excelDB + ";Extended Properties=Excel 8.0;";
using (OleDbConnection OleDB = new OleDbConnection(strCon))
{
    OleDB.Open();
    OleDbDataAdapter OleDat = new OleDbDataAdapter("select * from [Sheet1$]", OleDB);
    OleDat.Fill(ds);
    OleDat.Dispose();
    OleDB.Close();
}
File.Delete(excelDB);



------解决方案--------------------
OleDbDataAdapter.Fill,OleDbConnection无需Open和Close 

不过看你的代码,似乎不是释放资源的问题
------解决方案--------------------
1楼的解释是对的,如果用DataAdapter,默认情况下,连接关闭的时候,适配器会自动open,读取数据完毕后,再close。

这一句是没有必要的其实:
OleDat.Dispose();

这种情况属于创建连接时内部错误。下次遇到后,看能不能把堆栈信息贴出来?
------解决方案--------------------
try
{
}
catch
{}
finilay
{
}
防止出现异常有资源放不了

我推测是文件上传的问题,没找到文件所致,检查一下文件是否存在
------解决方案--------------------
楼主 本人也在做相关问题,但是 我要求的是 绑定到dategridview中, 能加我QQ 教下我么
------解决方案--------------------
看错误堆栈,出错是在Open那句,去掉Open和Close行吗?
C# code
// excelDB 是Excel文件名
DataSet ds = new DataSet();
string strCon = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + excelDB + ";Extended Properties=Excel 8.0;";
using (OleDbConnection OleDB = new OleDbConnection(strCon))
{
    //OleDB.Open();
    OleDbDataAdapter OleDat = new OleDbDataAdapter("select * from [Sheet1$]", OleDB);
    OleDat.Fill(ds);
    //OleDat.Dispose();
    //OleDB.Close();
}
File.Delete(excelDB);

------解决方案--------------------
应该是权限的问题,你可能在最近一天把excel所在目录的写入权限干掉了,建议你手动设置excel所在目录为everyone可写!
------解决方案--------------------
光是你给的这点提示看不出来问题的
------解决方案--------------------
DDDD
------解决方案--------------------
这个是.net 的BUG反正很多人都释放不了的!
------解决方案--------------------
System.Data.ProviderBase.DbConnectionFactory.CreateNonPooledConnection

这句提示是否有帮助,你是不是默认禁用掉了连接池?
------解决方案--------------------
C# code

string strCon = "OLEDB;Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + excelDB + ";Extended Properties=Excel 8.0;HDR=Yes;IMEX=1";

------解决方案--------------------
ConnString = "Provider=Microsoft.Jet.Oledb.4.0; Data Source=" + filepath + "; Extended Properties=\"Excel 8.0; HDR=No; IMEX=1;\""; 

string strCon = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\\Excels\\ScoreInfo.xls;Extended Properties=\"Excel 11.0;HDR=Yes;IMEX=1;\""; 
检查系统日志,还有资源占用情况