动态加载数据库连接和操作类

来源:互联网 发布:python urllib2 open 编辑:程序博客网 时间:2024/06/08 00:45
因为程序可能以后会连接不同的数据库,比如目前是sqlserver,以后随着系统的改善和升级,也许会连接到oracle数据库,这样通常我们就需要重新改写原有代码。可是大家都知道重新改代码会带来很多不必要的问题,这是最容易产生的,所以最好是不修改以前的任何东西,而是添加新的代码,这样即使出了问题也容易判断。所以我的这个例子就是这个功能,只要新的数据库连接和操作类符合已有的接口interface,这样就只要复制到当前项目下,然后修改配置文件,最后重新编译整个工程,即可,当然后面的操作是由批处理来完成的。其实这也不是我自己想出来的,是借鉴了一位前辈的例子,嘿嘿,不过我不记得他的帖子的url了,不好意思啊

这是配置文件
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <appSettings>
    <!-- Sql Server读取这里的字符串来初始化具体的数据库连接类-->
    <add key ="AssemblyName" value ="DbSqlServer"/>
    <add key ="Constractor" value ="DbSqlServer.DaoSqlServer"/>

    <!-- Oracle-->
    <!--如果换成了其他数据库,只要修改这个配置文件就可以了
    <add key ="AssemblyName" value ="DataOracle"/>
    <add key ="Constractor" value ="DataOracle.DAOOracle"/>-->
<!--其他代码省略-->
</configuration>
下面的是具体实例化数据库类的代码
        public static IDbAccess Instance()
        {
            // 读取的是配置文件的key,通过反射机制生成具体的数据库类
            string strAssemblyName = ConfigurationManager.AppSettings["AssemblyName"];
            string className = ConfigurationManager.AppSettings["Constractor"];
            //Type type = null;
            object obj = null;
            try
            {
                obj = Assembly.Load(strAssemblyName).CreateInstance(className, false);
                //type = Type.GetType(className);
            }
            catch (TypeLoadException e)
            {
                throw e;
            }
            if (obj == null)
            {
                throw new Exception("类型加载失败!");
            }
            //obj = Activator.CreateInstance(type);
            if (obj is IDbAccess)
            {
                return (IDbAccess)obj;// IDbAccess是具体数据库操作类的接口
            }
            else
            {
                throw new Exception("此类没有实现****接口!");
            }
        }
都完事之后,编写如下的批处理文件,然后执行,其实就是重新编译整个工程(可以把下面的复制,然后执行就可以了,当然要放到项目的目录下)
@Set Path=C:/WINDOWS/Microsoft.NET/Framework/v2.0.50727;%PATH%
msbuild TalentApp.sln
Copy ./DbSqlServer/bin/Debug/DbSqlServer.dll  ./WinForm/bin/Debug
pause

原创粉丝点击