WinForm如何简单地做到支持多数据库

首先我们定义一个数据库操作类接口,这里我定义为DBManager.cs,接口内我定义了一般意义上会涉及到的数据库操作:

 public interface DBManager
    {
        /// <summary>
        /// 执行简单SQL语句,返回datatable
        /// </summary>
        /// <param name="sqlstr"></param>
        /// <returns></returns>
         DataTable dosql(string sqlstr);


        /// <summary>
         /// 执行简单SQL语句,返回受影响行数
        /// </summary>
        /// <param name="sqlstr"></param>
        /// <returns></returns>
         int Do_SQL(string sqlstr);

        /// <summary>
        /// 执行更新操作,使用参数化SQL语句,返回受影响行数
        /// </summary>
        /// <param name="tablename">表名</param>
        /// <param name="dicvalue">Set语句部分</param>
        /// <param name="dickey">Where语句部分</param>
        /// <returns></returns>
         int Do_Update(string tablename, Dictionary<string, object> dicvalue, Dictionary<string, object> dickey = null);

        /// <summary>
        /// 执行参数化插入语句,返回受影响行数
        /// </summary>
        /// <param name="tablename">表名</param>
        /// <param name="dicvalue">插入的键值对</param>
        /// <returns></returns>
         int Do_Insert(string tablename,Dictionary<string,object> dicvalue);


        /// <summary>
        /// 执行参数化删除语句,返回受影响行数
        /// </summary>
        /// <param name="tablename"></param>
        /// <param name="dickey"></param>
        /// <returns></returns>
         int Do_Delete(string tablename,Dictionary<string,object> dickey);
    }

这个接口的用处在于,我们可以为每一种数据库类型建立一个继承此接口的操作类,并实现接口内的方法.如为SQL写一个SQLHelper,为Oracle写一个OracleHelper,在这里我们先记下我们实现这两个类,具体代码就不再一一赘述,

/// <summary>
    /// SQL数据库操作类
    /// </summary>
    public class SQLHelper: DBManager{.......}

/// <summary>
    /// Oracle数据库操作类
    /// </summary>
    public class OracleHelper: DBManager{.....}

接着我们需要简单地使用工厂模式,创建数据库接口工厂IDbFactory:

 public interface IDbFactory
    {
       DBManager createDbmanager();
    }

下一步是创建工厂类实现工厂接口:

public class DBFactory:IDbFactory
    {
        public DBManager createDbmanager()
        {
            string DBtype = ConfigHelper.GetAppConfig("Dbtype");//这里假设我们把数据库类型放在配置文件app.config里,configHelper是本人写的一个读取配置文件的工具类,请理解   ////这里是读取一个配置项即可
            DBManager manager = null;
            switch (DBtype)
            {

//根据配置项的值创建不用的操作类示例
                case "SQL":
                    manager= new SQLHelper();
                    break;
                case "Oracle":
                    manager= new OracleHelper();
                    break;
                default:
                    break;  
            }
            return manager;
        }
    }

于是正常我们可以通过

IDbFactory factory = new DBFactory();
            DBManager manager = factory.createDbmanager();

这两句代码实现调用,让系统根据配置来生成不同的数据库操作类,实现支持多数据库的效果.

posted @ 2017-07-17 10:42  半面高墙  阅读(299)  评论(0)    收藏  举报