在前面的两篇文章中简单介绍了Spring.Net和如何搭建Spring.Net的环境,在本篇文章中将使用Spring.Net实现多数据库的切换。
一、建立一个空白的解决方案,名称为“SpringDotNot”
二、新建一个类库项目:IBLL
在IBLL类库里面有一个名称为IDatabaseService的接口,接口里面有两个方法:GetDataTableBySQL()和GetDbTyoe()。
代码如下:
1 usingSystem;2 usingSystem.Collections.Generic;3 usingSystem.Linq;4 usingSystem.Text;5 usingSystem.Threading.Tasks;6 usingSystem.Data;7
8 namespaceIBLL9 {10 ///
11 ///数据库服务接口12 ///
13 public interfaceIDatabaseService14 {15 ///
16 ///根据SQL语句查询数据17 ///
18 ///
19 DataTable GetDataTableBySQL();20
21 ///
22 ///获取数据库类型23 ///
24 ///
25 stringGetDbTyoe();26 }27 }
三、新建一个类库项目:BLLMsSql
BLLMsSql表示使用SqlServer数据库实现IBLL里面的接口,BLLMsSql要添加IBLL.dll的引用,代码如下:
1 usingSystem;2 usingSystem.Collections.Generic;3 usingSystem.Linq;4 usingSystem.Text;5 usingSystem.Threading.Tasks;6 usingIBLL;7 usingSystem.Data;8 usingSystem.Data.SqlClient;9 usingSystem.Configuration;10
11 namespaceBLLMsSql12 {13 ///
14 ///SqlServer服务类,实现IDatabaseService接口15 ///
16 public classSqlServerService :IDatabaseService17 {18 publicDataTable GetDataTableBySQL()19 {20 string strConn = ConfigurationManager.ConnectionStrings["SqlServer"].ConnectionString;21 DataTable dt = newDataTable();22 using (SqlConnection conn = newSqlConnection(strConn))23 {24 try
25 {26 string str = "select * from PtInfectionCard";27 SqlCommand cmd = newSqlCommand(str, conn);28 SqlDataAdapter adapter = newSqlDataAdapter(cmd);29 conn.Open();30 adapter.Fill(dt);31 }32 catch(Exception ex)33 {34
35
36 }37 finally
38 {39 conn.Close();40 }41
42 }43 returndt;44 }45
46 ///
47 ///返回SqlServer数据库48 ///
49 ///
50 public stringGetDbTyoe()51 {52 return "我是SQLServer数据库";53 }54 }55 }
四、新建一个类库项目:BLLOracle
BLLOracle表示使用Oracle数据库实现IBLL里面的接口,BLLOracle要添加IBLL.dll的引用,代码如下:
1 usingSystem;2 usingSystem.Collections.Generic;3 usingSystem.Linq;4 usingSystem.Text;5 usingSystem.Threading.Tasks;6 usingIBLL;7 usingSystem.Data;8 usingSystem.Data.OracleClient;9 usingSystem.Configuration;10
11 namespaceBLLOracle12 {13 ///
14 ///Oracle数据服务类,实现IDatabaseService接口15 ///
16 public classOracleService :IDatabaseService17 {18 publicDataTable GetDataTableBySQL()19 {20 string strConn = ConfigurationManager.ConnectionStrings["ORACLE"].ConnectionString;21 DataTable dt = newDataTable();22 using (OracleConnection conn = newOracleConnection(strConn))23 {24 try
25 {26 string str = "select * from emp";27 OracleCommand cmd = newOracleCommand(str, conn);28 OracleDataAdapter adapter = newOracleDataAdapter(cmd);29 conn.Open();30 adapter.Fill(dt);31 }32 catch(Exception ex)33 {34
35 }36 finally
37 {38 conn.Close();39 }40 }41
42 returndt;43 }44
45 ///
46 ///返回Oracle数据库47 ///
48 ///
49 public stringGetDbTyoe()50 {51 return "我是Oracle数据库";52 }53 }54 }
五、客户端调用
添加一个winform应用程序,界面上有一个DataGridView和一个Button按钮,点击Button按钮的时候,从数据库里面取数据并通过DataGridView展示查询出的数据,界面设计如下:
Spring.Net的配置信息都写在项目的配置文件(即App.config)中,配置文件如下:
1 <?xml version="1.0" encoding="utf-8"?>
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
后台代码如下:
1 usingSpring.Context;2 usingSystem;3 usingSystem.Collections.Generic;4 usingSystem.ComponentModel;5 usingSystem.Data;6 usingSystem.Drawing;7 usingSystem.Linq;8 usingSystem.Text;9 usingSystem.Threading.Tasks;10 usingSystem.Windows.Forms;11 usingIBLL;12
13 namespaceWinClient14 {15 public partial classFrmMain : Form16 {17 publicFrmMain()18 {19 InitializeComponent();20 }21
22 ///
23 ///加载数据24 ///
25 ///
26 ///
27 private void btn_LoadData_Click(objectsender, EventArgs e)28 {29 //从配置文件读取配置
30 IApplicationContext ctx =Spring.Context.Support.ContextRegistry.GetContext();31 //获取具体的实现类
32 IDatabaseService dbService = ctx.GetObject("bll") asIDatabaseService;33 //从数据库查询数据
34 DataTable dt =dbService.GetDataTableBySQL();35 //将查询出的数据绑定到DataGridView中
36 this.dgv_Demo.DataSource =dt;37 }38 }39 }
配置文件中设置的是使用OracleService实现类,所以程序运行结果:
如果要使用SqlServer数据库,只需要修改配置文件中object节点中type的属性值即可:
改成使用SqlServer数据库以后的运行结果: