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

转帖|其它|编辑:郝浩|2008-09-17 09:41:15.000|阅读 1048 次

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

# 界面/图表报表/文档/IDE等千款热门软控件火热销售中 >>

因为程序可能以后会连接不同的数据库,比如目前是sqlserver,以后随着系统的改善和升级,也许会连接到oracle数据库,这样通常我们就需要重新改写原有代码。可是大家都知道重新改代码会带来很多不必要的问题,这是最容易产生的,所以最好是不修改以前的任何东西,而是添加新的代码,这样即使出了问题也容易判断。所以我的这个例子就是这个功能,只要新的数据库连接和操作类符合已有的接口interface,这样就只要复制到当前项目下,然后修改配置文件,最后重新编译整个工程,即可,当然后面的操作是由批处理来完成的。

这是配置文件
<?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


标签:

本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@evget.com

文章转载自:DIY部落

为你推荐

  • 推荐视频
  • 推荐活动
  • 推荐产品
  • 推荐文章
  • 慧都慧问
扫码咨询


添加微信 立即咨询

电话咨询

客服热线
023-68661681

TOP