//构造函数,用于打开数据库;
                   public DataAccess()
{
//
//
MyConn=new OracleConnection(GetConnectionString());
if(MyConn.State==ConnectionState.Closed)
MyConn.Open();
}
        
//析构函数,用于关闭数据库;
~DataAccess()
{
if(MyConn.State==ConnectionState.Open)
{
MyConn=null;
MyConn.Close();
}
}现在有问题是在用户非正常关闭程序时(直接按窗体的(叉号)) 在析构函数中总报错!
MyConn 没有被实例化!(别告诉我再在析构函数里 new,希望要个比较实用的方法!)

解决方案 »

  1.   

    if(MyConn!=null)
    {
    if(MyConn.State==ConnectionState.Open)
    {
    MyConn=null;
    MyConn.Close();
    }
    }
      

  2.   

    to:zwfhome1(任由风吹) 
       不管用,报一样的错!
      

  3.   

    if(MyConn!=null)
    {
    if(MyConn.State==ConnectionState.Open)
    {
    MyConn=null;
    MyConn.Close();
    }
    }
    把这段代码放到FORM关闭事件里
      

  4.   

    对,判断一下MyConn是不是null就可以了
      

  5.   

    我是想把它放到析构函数里,让系统自动关闭,如果放到from 的关闭事件里我就不用来问了!
      

  6.   

    把.Close()放在=null前面
    你先把对象至为null了,它当然没法Close();
      

  7.   

    to:shrinerain(圣影雨)
    可是它同样报错!"Internal Pooler Error: 2"
    注:我用的是oracle10g(应该没什么关系吧????)
      

  8.   

    我是想把它放到析构函数里,让系统自动关闭,如果放到from 的关闭事件里我就不用来问了!
    c# 并不真正支持析构编程风格,不能预计它们会在什么时候运行,一般情况下不鼓劢使用它们。
    ---摘自C#高级编程
    希望楼主问题要谦虚,态度要温和!
      

  9.   

    "我是想把它放到析构函数里,让系统自动关闭,如果放到from 的关闭事件里我就不用来问了!"
    sorry! 我对自己的话道歉!
    谢谢了!
      

  10.   

    MyConn=null指向空,
    MyConn.Close自然保证出错