我有一个用于数据导入的页面,功能是由用户上传一个excel文件,将内容导入到数据库中,程序运行一切正常。
但是现在每隔一两天都会出现一次问题:
未指定的错误 在 System.Data.OleDb.OleDbConnectionInternal..ctor(OleDbConnectionString constr, OleDbConnection connection)这时重启一次IIS后就会好起来了,推测可能是读入数据后没有释放完资源导致的,但是自我感觉已经把该释放的都释放了。
下面是读取excel文件的代码:// 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);

解决方案 »

  1.   

    OleDbDataAdapter.Fill,OleDbConnection无需Open和Close 不过看你的代码,似乎不是释放资源的问题
      

  2.   

    1楼的解释是对的,如果用DataAdapter,默认情况下,连接关闭的时候,适配器会自动open,读取数据完毕后,再close。这一句是没有必要的其实:
    OleDat.Dispose();这种情况属于创建连接时内部错误。下次遇到后,看能不能把堆栈信息贴出来?
      

  3.   

    这是完整的错误及堆栈信息
    E:\www\website\InExcel\201006010827191898.xls未指定的错误 在 System.Data.OleDb.OleDbConnectionInternal..ctor(OleDbConnectionString constr, OleDbConnection connection) 在 System.Data.OleDb.OleDbConnectionFactory.CreateConnection(DbConnectionOptions options, Object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningObject) 在 System.Data.ProviderBase.DbConnectionFactory.CreateNonPooledConnection(DbConnection owningConnection, DbConnectionPoolGroup poolGroup) 在 System.Data.ProviderBase.DbConnectionFactory.GetConnection(DbConnection owningConnection) 在 System.Data.ProviderBase.DbConnectionClosed.OpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory) 在 System.Data.OleDb.OleDbConnection.Open()
      

  4.   

    try
    {
    }
    catch
    {}
    finilay
    {
    }
    防止出现异常有资源放不了我推测是文件上传的问题,没找到文件所致,检查一下文件是否存在
      

  5.   

    楼主 本人也在做相关问题,但是 我要求的是 绑定到dategridview中, 能加我QQ 教下我么
      

  6.   

    加try的话只是不显示错误了,但是错误还是在的啊。
    我确定文件是存在的
      

  7.   

    看错误堆栈,出错是在Open那句,去掉Open和Close行吗?
    // 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);
      

  8.   

    应该是权限的问题,你可能在最近一天把excel所在目录的写入权限干掉了,建议你手动设置excel所在目录为everyone可写!
      

  9.   

    再说一下问题现象,这段代码在一般运行时是没有问题的,至少连续执行几十次都没有问题。所以不需要考虑权限等问题,看堆栈是出在 Open 里,但是前几十次Open都没有问题,在每运行了一两天之后才会有问题,当重启一下IIS后就会好。另外还需要什么提示?
      

  10.   

    这个是.net 的BUG反正很多人都释放不了的!
      

  11.   

    http://topic.csdn.net/u/20100520/12/7e077e0b-6336-4972-bd54-c3b48338f9ba.html
    不知道你用这个行不!
    反正我的机子就是释放不了的!
    我的系统是WIN7 办公2007
      

  12.   

    我导出用的是 org.in2bits.MyXls.dll 应该不存在LS说的问题
    现在的问题在于导入,我导入有问题的时候导出还是没有问题的.
      

  13.   

    System.Data.ProviderBase.DbConnectionFactory.CreateNonPooledConnection这句提示是否有帮助,你是不是默认禁用掉了连接池?
      

  14.   

    试试看这样的连接字符串:
    string strCon = "OLEDB;Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + excelDB + ";Extended Properties=Excel 8.0;HDR=Yes;IMEX=1";
      

  15.   

    用18楼的连接字符串提示找不到 ISAM
    还有其他可能性吗?
      

  16.   


    string strCon = "OLEDB;Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + excelDB + ";Extended Properties=Excel 8.0;HDR=Yes;IMEX=1";
    怎么会提示找不到 ISAM?是不是你的连接字符串敲错了?
      

  17.   

    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;\""; 
    检查系统日志,还有资源占用情况