我看到一个不用visual那样可视化调用数据库的例子,它创建一个DBase类进行调用。例子代码见下面。我有几个问题请教一下:
1.用这个类进行数据库的查询和操作,每次新建一个类时它都会建一个connection,然后将一个dataadapter,dataset.我想这样每次打开关闭数据库不是都要耗费资源,能不能在一个项目中只建立一次链接和dataadapter,dataset。每次操作时只是增加和删除datatable,不用关闭。这样可以节约资源。
请问大家这样理解有没有问题,该怎么做?代码改如何改?
谢谢!using System;
using System.Data;
using System.Data.SqlClient;
using System.Data.OleDb;
using System.Collections;
namespace account.Class
{    
    public class DBase 
    {
        
        protected OleDbConnection conn;
        public DBase()
        {
            var var = new var();
            string connectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=DataBase\\Account.mdb";
            try
            {
             openConnection(connectionString);
            }
            catch
            {
            }
        }
        private void openConnection() 
        {
            if (conn.State == ConnectionState.Closed)
            {
                conn.Open ();
            }
        }        private void closeConnection() 
        {
            if (conn.State == ConnectionState.Open )
            {
                conn.Close ();
            }
        }       
        public DataTable openQuery(string query) 
        {
            OleDbDataAdapter dsCmd = new OleDbDataAdapter ();
            DataSet dset = new DataSet ();
            DataTable dtable = null;            dsCmd.SelectCommand = new OleDbCommand(query, conn);
            openConnection();
            dsCmd.Fill(dset, "mine");
            dtable = dset.Tables[0];
            closeConnection();
            if (dtable!=null)
                return dtable;
            else 
                return null;
        }        public bool ExeSql(string query) 
        {
            OleDbCommand adcmd = new OleDbCommand(@query, conn);
            openConnection();
            adcmd.ExecuteNonQuery();
            closeConnection();
            return true;
        }
        private void openConnection(string connectionString) 
        {
            conn = new OleDbConnection(connectionString);
        }        public OleDbConnection getConnection() 
        {
            return conn;
        }
    }

解决方案 »

  1.   

    用dataset存每次用的时候直接从里面取不需要每次都跟数据库链接
      

  2.   

    的确连接是有限的资源。.NET 连接对象是放在缓存池里面的,Reader从读取速度上来说效率高于其他的方式。再不使用连接的时候Close即可,不必担心。
      

  3.   

    能不能在一个项目中只建立一次链接和dataadapter,dataset。每次操作时只是增加和删除datatable,不用关闭
     adapter会自动关闭吧,缓存在dataset中就断开连接,操作完在跟数据库做次交互更新数据。