动态加载数据库连接和操作类
来源:互联网 发布: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
这是配置文件
<?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
- 动态加载数据库连接和操作类
- 数据库连接和相关操作
- 动态加载类和静态加载类
- 使用LayoutInflater动态加载布局和操作控件
- Android布局 使用LayoutInflater动态加载布局和操作控件
- Android使用LayoutInflater动态加载布局和操作控件
- java 数据库连接操作类
- C#如何写DBHelper 类(数据库连接和操作)
- 动态加载和静态加载
- 延迟加载和动态加载
- 万能动态数据库连接工具类
- PE文件操作-动态加载
- 如何动态加载c++函数和类
- 类加载器和动态代理
- 【python】 动态加载模块和类
- python - 动态加载模块和类
- java类加载器和动态代理
- python - 动态加载模块和类
- 利用Forms验证(自定义、角色提供程序、单点登录)登陆 (转)
- 男人必读雄文【看后请雄起】
- 中秋之后
- [轉]VB圖片讀取!
- ZPL并口打印
- 动态加载数据库连接和操作类
- 丢车
- 搞笑的翻译,有趣的标牌——Translate server error
- (WPF学习记录)第六章 Dock与Grid
- C++私有继承和保护继承-转载
- 我的25年嵌入式生涯(转载)
- 书评:《Introducing Silverlight 2》 – 第十一章
- 第六課形状記憶合金
- 书评:《Introducing Silverlight 2》 – 第十二章