我有一个功能模块,通过与acess数据打交道,在winform中进行应用操作。数据库操作层使用的是三层接口,即业务层、接口、持久层,业务层通过调用接口来进行操作数据库。另有一个factory工厂,通过配置文件来映射,为的是适应不同的数据库。我在持久层C中如下代码:
Class C.cs
 public class C : IC
    {
        private static readonly string connecString = ConfigurationManager.AppSettings["ConnectionString"];               //数据库连接
        OleDbConnection aConnection = null        public TaskList()
        {
           aConnection = new OleDbConnection(connecString);
           if (aConnection.State == ConnectionState.Closed) aConnection.Open();
        }public IList<TaskListInfo> GetTaskListData(string sql)
{
OleDbCommand aCommand = new OleDbCommand("select * from " + TaskListInfo.tableName + sql, aConnection);
    doSth……
}
}
然后我在winform里通过timer定时器,每隔0.2秒就调用GetTaskListData(),代码如下 private void timer2_Tick(object sender, EventArgs e)
        {
            try
            {
                C  Task = new C();
            IList<TaskListInfo> table = Task.GetTaskListData(" where FinishStatus = false");
            }
            catch (System.Exception ex)
            {
                MessageBox.Show(ex.ToString());
            }
           
        }
每当定时器运行大概4分钟时,系统就会报错。后我思考再三,觉得可能是C类,在构造函数中进行了数据库连接,所以数据库连接过多造成的,于是我将C改成:
Class C.cs
 public class C : IC
    {
        private static readonly string connecString = ConfigurationManager.AppSettings["ConnectionString"];               //数据库连接
       
        public TaskList()
        {
           
        }public IList<TaskListInfo> GetTaskListData(string sql)
{
        OleDbConnection  aConnection = new OleDbConnection(connecString);
        if (aConnection.State == ConnectionState.Closed) aConnection.Open()
        doSth……
}
}
问题得以解决,但是我虽然改对了,却不明白其理,还请高手指点