public class Database                                   //数据库类
    {
        public OleDbConnection conn = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=user.mdb");
        public OleDbCommand comm = new OleDbCommand();
        public OleDbDataReader reader;
        public Database()
        {
            try
            {
                comm.Connection = conn;
                conn.Open();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message+"无法打开程序");
                ///////////////////////////////////////////////关闭程序的语句?????????
            }
        }        ~Database()
        {
            conn.Close();
        }        public void ReadSql(String comtxt)
        {
            if (reader.IsClosed == true) reader.Close();////////这里报错:未将对象引用设置到对象的实例
            comm.CommandText = comtxt;
            reader = comm.ExecuteReader();
        }        public object ExecuteSql(String comtxt)
        {
            if (reader.IsClosed == true) reader.Close();///////////同上报错
            comm.CommandText = comtxt;
            return comm.ExecuteScalar();
        }
    }
想问几个问题:
1.怎么在C#里面定义一个全局访问的对象呢,比如说我想打开程序的时候就一直连着数据库,创建一个数据库对象db,所有的Form对数据库的操作都是操作db来进行,不知道有什么方法呢,似乎不能像C++一样在定义后面直接创建一个对象
怎么才能做到对数据库的全局的连接呢2.上面报错(未将对象引用设置到对象的实例)的地方是哪里出了问题呢??3.怎么关闭整个程序,上面如果我try的部分出错,会到catch,但是程序会继续进行,我想直接退出整个程序但是不知道应该用什么4.当有多个Form的时候,似乎从一个Form打开另外一个Form后,再把所有的Form关掉,进程还是在任务管理器的,不知道怎么才能真正把这些Form都关闭,把程序结束掉我是初学者,只知道一点C++的东西,分也不多,希望大家帮忙

解决方案 »

  1.   

    1.数据库长连你就别想了,禁用,浪费数据库资源不说,你服务器都要给你搞瘫痪的
    2.reader还没实例化呢
    3.你的try catch是写在构造函数里的,这个 不建议, 另外catch到错误不让执行下面的就用return;
    4.关掉窗体当然没用,要Application,Exit();
      

  2.   

    谢谢了那么,是每次用到数据库的时候再连接吗,这样的话连接次数多,会不会降低速度,还是有什么其它的办法来减少
    对数据库的连接第2个问题...似乎执行一次ExecuteReader之前要保证reader是closed才行,那么我怎么才能保证在执行它之前
    reader是close的呢.第一次是不需要close的,但是后面需要了...
      

  3.   

    连接次数当然也不能很多,你一个页面查询数据就最好只用一次连接取出所有数据
    如果有些复杂统计数据的情况,需要取过来数据然后再到数据库查询的话,就最好写存储过程,以减少交互次数comm.ExecuteReader();一次就用一个reader,不要声明成全局的,用返回参数返回reader对象
      

  4.   

    catch里用return似乎不能直接退出程序application.exit()好像也起不到退出的作用
      

  5.   

    在button等事件处理函数里application.exit()好像可以但是在Form()函数里不行,catch里面也不行??这是为什么??
      

  6.   

    需要执行前Close,那你就判断呗,不是Close的话就Close掉。