TO:qimini(循序渐进) :
  出错的函数所在的类已经继承自IDisposeable,如下:
public class DbConnect : IDisposable
{
...
protected virtual void Dispose(bool Disposing)
{
//TODO:释放所有的类成员变量
if(! Disposing)
{
return;
}
// 显式关闭FOledbConnection连接,并将连接返回池中。
if(FConnection != null)
{
/*if(FConnection.State == ConnectionState.Open)
{
FConnection.Close();  
}*/
FConnection.Dispose();
//FConnection = null;
}
}
...
}

解决方案 »

  1.   

    private bool disposed;
    public void Dispose()
    {
         Dispose(true);
         GC.SuppressFinalize(this);
    }
    private void Dispose(bool disposing)
    {
         if(!this.disposed)
         {
               
            if(disposing)
            {
            }             
            if(FConnection != null)
    {
        FConnection.Dispose();
    }
                   
         }
         disposed = true;         
    }
      

  2.   

    BTW,FConnection的new必须在类的构造函数中执行  :)
      

  3.   

    TO:qimini(循序渐进) :
      万分感谢您的解答,但是依照您的思路我重新改了代码以后,调试错误仍然出现,错误出现时光标停留在disposed = true; 这一行。我将DbConnect类的全部源码贴在下面,请您再帮忙看看。谢谢! public class DbConnect : IDisposable
    {
      
    [DllImport("kernel32")]
    private static extern int GetPrivateProfileString(string section,string key,string def,StringBuilder retVal,int size,string filePath);
    private OleDbConnection FConnection;
    private bool disposed;
    //-----------------------------------------------------------------------   
    public string IniReadValue(string Section,string Key)
    {
    string SystemDirectory;
    StringBuilder temp = new StringBuilder(255); SystemDirectory=System.Environment.SystemDirectory;
    int i = GetPrivateProfileString(Section,Key,"",temp,255,SystemDirectory+"\\DB_PTERP.ini");
    return temp.ToString();
    }
    //-----------------------------------------------------------------------
    public string DataBase()
    {
    string ReturnText;
    ReturnText="provider=SQLOLEDB;data source="+IniReadValue("DataBase","data source")
    +";initial catalog="+IniReadValue("DataBase","catalog")+";user id="
    +IniReadValue("DataBase","user id")+";password="+IniReadValue("DataBase","password");
    return ReturnText;
    }
    //-----------------------------------------------------------------------
    public DbConnect()
    {
    // TODO: 构造函数逻辑
    FConnection = new OleDbConnection();
    }
    //-----------------------------------------------------------------------    
    public void Dispose()
    {
    Dispose(true);
    GC.SuppressFinalize(this);
    }
    //-----------------------------------------------------------------------        
    protected virtual void Dispose(bool Disposing)
    {
    //TODO:释放所有的类成员变量
    if(!this.disposed)
    {
    if(Disposing)
    {

    // 显式关闭FOledbConnection连接,并将连接返回池中。
    if(FConnection != null)
    {
    FConnection.Dispose();
    }
    }
    disposed = true; 
    }
    //-----------------------------------------------------------------------    
    protected bool ConnectToDb()
    {
    // 数据库的连接字串
    string DbConnectStr=DataBase();
    try
    {
    // TODO: 连接到数据库
    FConnection.ConnectionString = DbConnectStr;
    FConnection.Open();
    return true;
    }
    catch(System.Exception)
    {
    return false;
    }
    }
    //-----------------------------------------------------------------------
    //属性: 得到到数据库的连接
    protected OleDbConnection DbConnection
    {
    get {return FConnection;}
    }
    }
      

  4.   

    在Debug模式下把你的详细的错误信息Post出来,还是句柄没有初始化?
      

  5.   

    Debug模式下的错误信息一直是如下:
    未处理的“System.InvalidOperationException”类型的异常出现在 mscorlib.dll 中。其他信息: 句柄未初始化。
      

  6.   

    1、涉及到Connection的方法,都加上这样的判断
    protected OleDbConnection DbConnection
    {
    get
                                {
                                     if(this.FConnection!=null)
                                        return FConnection;
                                     else
                                        throw new NullObjectRefrenceExceptoin("Object is not exsit");<<<<<NullObjectRefrenceExceptoin忘了是哪个类了,空引用错误类
                                 }
    }
    2、去掉API的调用,测试一下有无错误
      

  7.   

    TO:qimini(循序渐进) :
      按您给的方法还是出现同样的错误。
      

  8.   

    把API去掉还有错误?代码是正确的,把你的项目在别人的机器上运行调试,看看是否还有错误?