异常详细信息: System.Data.OleDb.OleDbException: 未指定的错误    public OleDbDataReader getReader(string sql)
    {
        try
        {
            OleDbCommand myCommand = new OleDbCommand(sql, MyConn);
            if (MyConn.State == ConnectionState.Closed) MyConn.Open();
            OleDbDataReader Myreader;
            Myreader = myCommand.ExecuteReader();
            return Myreader;
            MyConn.Close();
        }
        catch (Exception ex)
        {
            if (MyConn.State == ConnectionState.Open) MyConn.Close();
            throw ex;    //就这一行错误
        }
        
    }
我在网上找过很多方法,修改iis匿名访问有了,修改temp权限也改了,添加<identity impersonate="false"/>也加了
每次刚开始都好的,多刷新几次就出错,实在郁闷
链接代码是这样的
    public OleDbConnection MyConn;
    public DataControl()
    {
        string MyConnString = ConfigurationManager.AppSettings["myconnstring"].ToString() + System.Web.HttpContext.Current.Server.MapPath(ConfigurationManager.AppSettings["mydbpath"]).ToString();
        MyConn = new OleDbConnection(MyConnString);
    }帮忙看一下,谢谢啊

解决方案 »

  1.   

    直接MESSAGEBOX.SHOW不好吗
    话说一般THROW直接用会出问题吧 因为try catch如果出错的话会复原的
      

  2.   

    return Myreader; 
    MyConn.Close(); 方法在返回后 不会再执行“MyConn.Close()”,也就是return 后面的语句都不会执行了
      

  3.   

    检查一下数据库connection有没有关闭。
      

  4.   


    当然,你也可以把max pool size设置的很大,呵呵
      

  5.   


    8错,良好的习惯还是要保持的,结束就要Close,用在return前面OleDb是不是连ACCESS啊?给mdb文件加个权限看看?
      

  6.   

    LZ建议你把TRY CATCH去掉 然后看看是哪一行出错了
      

  7.   


    谢谢,try catch去掉的话就 if (MyConn.State == ConnectionState.Closed) MyConn.Open();
    这行错,也是未指定的错误
      

  8.   

    !!
    强烈建议把IF条件去了试试......直接OPEN
    OLEDB不熟 不过ADO.NET的技术内幕上也没看到过LZ这样的写法.....
      

  9.   

    如果还错的话 要么是if的条件有问题 要么是MYCONN定义的连接错了
      

  10.   

    刚刚查到了---->异常详细信息: System.Data.OleDb.OleDbException: 未指定的错误 [OleDbException (0x80004005): 未指定的错误] System.Data.OleDb.OleDbConnectionInternal..ctor(OleDbConnectionString constr, OleDbConnection connection) +1131233 System.Data.OleDb.OleDbConnectionFactory.CreateConnection(DbConnectionOptions options, Object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningObject) +53 System.Data.ProviderBase.DbConnectionFactory.CreateNonPooledConnection(DbConnection owningConnection, DbConnectionPoolGroup poolGroup) 
    网上的解决方案很多,正确答案原来如此: 在连接数据库的时候是这么做的: public static OleDbConnection getxwdtConn() { string connectionstring = WebConfigurationManager.ConnectionStrings["xwdtconnection"].ConnectionString; OleDbConnection con = new OleDbConnection(connectionstring); return con; } 在MS sql或Access,中都不会有问题,调试也不会有问题。 发布之后会有如上错误提示。 是因为数据库的操作中肯定有oledbdatadapter,或dataset,并且使用了con.open()和con.close(),。 具体解决只需把open 和close删掉就可以了,因为用的是断开式连接。 如果改用静态变量的做法
      

  11.   


    <appSettings>
        <add key="myconnstring" value="provider=microsoft.jet.oledb.4.0;data source="/>
        <add key="mydbpath" value="~/App_Data/MyData.mdb"/>
      </appSettings>
    配置文件里是这样的,然后链接
    public OleDbConnection MyConn; 
        public DataControl() 
        { 
            string MyConnString = ConfigurationManager.AppSettings["myconnstring"].ToString() + System.Web.HttpContext.Current.Server.MapPath(ConfigurationManager.AppSettings["mydbpath"]).ToString(); 
            MyConn = new OleDbConnection(MyConnString); 
        }