ORM映射框架总结--数据操作(五)
1.数据库加载驱动和操作接口 IDbProvider
2 *
3 * 2009-4-22
4 *
5 *
6 * 数据库操作加载驱动接口,
7 * 提供了数据库操作的各种命令
8 * */
9 using System;
10 using System.Collections.Generic;
11 using System.Linq;
12 using System.Text;
13 using System.Data;
14
15 namespace CommonData.Data
16 {
17 public interface IDbProvider:IDisposable
18 {
19 string ConnectionString { get; set; }
20
21 IDbConnection Connection { get; set; }
22
23 IDbCommand Command { get; set; }
24
25 IDbDataAdapter Adapter { get; set; }
26
27 void Open();
28
29 void Close();
30
31 //--------------------控制事务
32 void BeginTransaction();
33
34 void RollBack();
35
36 void Commit();
37
38
39 //-------------------数据提供加载驱动
40 IDbProvider CreateInstance();
41 }
42 }
43
该接口封装了数据库连接语句,数据库连接对象,数据库操作命令,数据库适配器几个属性,并且都是使用的接口类型。在现实的过程中 因为数据库选择的不同,会导致后面接口实现类的代码不同,如果程序都是使用接口来操作,就不用担心数据库的修改而大量更改代码,只需 要修改实现类的操作过程就可以了。
这个接口还提供了几个方法:
void Open(); 这个用于打开数据库的连接
void Close(); 这个用于关闭数据库连接
数据库操作永远不可能只有一个原子操作,很多情况下都需要一连 串的原子操作组合,这个时候我们就必须考虑事务操作情况。下面的方法可以提供相应的事务操作
void BeginTransaction();
void RollBack();
void Commit();
2.数据库加载驱动和操作实现类SqlProvider
2 *
3 * 2009-4-22
4 *
5 *
6 * 数据提供加载驱动类
7 * */
8 using System;
9 using System.Collections.Generic;
10 using System.Linq;
11 using System.Text;
12 using System.Data;
13 using System.Data.SqlClient;
14 using CommonData.Data;
15
16 namespace CommonData.Data
17 {
18 public class SqlProvider:IDbProvider
19 {
20 private string connectionString = "server=.\\SQLEXPRESS;database=Fengling;Integrated Security=true";
21 /// <summary>
22 /// 数据库连接字符串
23 /// </summary>
24 public string ConnectionString
25 {
26 get
27 {
28 if (connectionString == null)
29 {
30 & nbsp;connectionString = "server=.\\SQLEXPRESS;database=Fengling;Integrated Security=true";
31 }
32 return connectionString;
33 }
34 set
35 {
36 connectionString&nb sp;= value;
37 }
38 }
39
40 private IDbConnection connection=null;
41 /// <summary>
42 /// 数据库连接对象
43 /// </summary>
44 public IDbConnection Connection
45 {
46 get
47 {
48 if (connection == null)
49 {
50 & nbsp;connection = new SqlConnection(connectionString);
51 }
52 return connection;
53 }
54 set
55 {
56 connection = value;
57 }
58 }
59
60 private IDbCommand command = null;
61 /// <summary>
62 /// 数据库命令操作对象
63 /// </summary>
64 public IDbCommand Command
65 {
66 get
67 {
68 if (command == null)
69 {
70 & nbsp;command = new SqlCommand();
71 & nbsp;command.Connection = connection;
72 }
73 return command;
74 }
75 set
76 {
77 command = value;
78 }
79 }
80
81 private IDbDataAdapter adapter = null;
82 /// <summary>
83 /// 数据库适配器对象
84 /// </summary>
85 public IDbDataAdapter Adapter
86 {
87 get
88 {
89 if (adapter == null)
90 {
91 & nbsp;adapter = new SqlDataAdapter(command as SqlCommand);
92 }
93 return adapter;
94 }
95 set
96 {
97 adapter = value;
98 }
99 }
100
101 /// <summary>
102 /// 数据库事务对象
103 /// </summary>
104 private IDbTransaction transaction = null;
105
106 /// <summary>
107 /// 打开数据库连接
108 /// </summary>
109 public void Open()
110 {
111 if (connection != null)
112 {
113 connection.Open ();
114 }
115 }
116
117 /// <summary>
118 /// 关闭数据库连接
119 /// </summary>
120 public void Close()
121 {
122 if (connection != null)
123 {
124 connection.Close ();
125 }
126 }
127
128 /// <summary>
129 /// 开始事务
130 /// </summary>
131 public void BeginTransaction()
132 {
133 transaction = connection.BeginTransaction();
134 command.Transaction = transaction;
135 }
136
137 /// <summary>
138 /// 事务回滚
139 /// </summary>
140 public void RollBack()
141 {
142 if (transaction != null)
143 {
144 transaction.Rollbac k();
145 command.Transaction = null;
146 transaction.Dispose ();
147 }
148 }
149
150 /// <summary>
151 /// 事务提交
152 /// </summary>
153 public void Commit()
154 {
155 if (transaction != null)
156 {
157 transaction.Commit ();
158 command.Transaction = null;
159 transaction.Dispose ();
160 }
161 }
162
163 /// <summary>
164 /// 创建数据库加载驱动
165 /// </summary>
166 /// <returns></returns>
167 public IDbProvider CreateInstance()
168 {
169 return new SqlProvider();
170 }
171
172 /// <summary>
173 /// 释放内存空间
174 /// </summary>
175 public void Dispose()
176 {
177 GC.SuppressFinalize(this);
178 }
179 }
180 }
181
SqlProvider 实现了接口IDbProvider,这里采用的是连接sql Server 数据库。其中数据库连接语句可以配置在Web.config中,这里 只是做测试用。至于实现接口的过程不必再讲解。
ORM映射框架总结--数据操作(五)相关推荐
- ORM映射框架总结--数据库操作库(精修版)
1. ORM数据库操作原理 前面已经介绍过了个人ORM映射框架中的三个核心库: 实体-数据库 映射特性关系: http://www.cnblogs.com/qingyuan/archive ...
- ORM 系列:一个个人ORM映射框架
转载:http://www.cnblogs.com/qingyuan/category/239086.html 个人ORM映射框架中的三个核心库: 实体-数据库 映射特性关系: http://www. ...
- ODB——基于c++的ORM映射框架尝试(安装)
这篇博客应该是和之前的重拾cgi一起的.当时为了模仿java的web框架,从页面的模板,到数据库的ORM,都找个对应的库来进行尝试.数据库用的就是ODB,官方网站是http://www.codesyn ...
- Java注解初体验(简单ORM映射框架)
2019独角兽企业重金招聘Python工程师标准>>> Java学了很久了,始终没有深入学习过注解反射这些高级特性,晚上花时间研究了一下,其实还挺有意思的,貌似也搞清楚了像Hiber ...
- ORM映射框架总结--SQL 语句生成组件
1. SQL 语句生成组建 之前说过ORM框架中有一个非常重要的组件,那就是SQL语句生成组件.SQL语句生成组件,顾名思义就是用于生成sql语句的一个组件.之前的Attribute 是用 ...
- ODB——基于c++的ORM映射框架尝试(使用)
2.使用 首先,需要定义一个对象,用来和数据库字段对应: [cce lang="cpp"] #ifndef VOLUME_H #define VOLUME_H #include & ...
- python 用元类 type 实现对数据库的ORM 映射
python 实现对数据库的ORM 映射 如果使用pymysql 操作数据库 不借助框架的话,频繁写sql语句, 的确比较麻烦 这里借助 type 元类 对 数据表类实现了 与mysql之间的 映射 ...
- Farseer.net轻量级ORM开源框架 V1.x 入门篇:视图的数据操作
导航 目 录:Farseer.net轻量级ORM开源框架 目录 上一篇:Farseer.net轻量级ORM开源框架 V1.x 入门篇:视图实体类映射 下一篇:Farseer.net轻量级ORM开源 ...
- 使用iBatis数据映射框架吧
如果您厌烦了编写 JDBC,可以考虑使用另一个功能丰富的数据映射框架 iBatis,它能够实现大多数同样的好处,并且只需要编写非常少的代码. 引言 对象关系映射程序(Object Relational ...
最新文章
- 一生都要Debug,我们最需要掌握哪些硬技能?
- VMD_test matlab仿真
- PostGIS之路——几何对象编辑(二)
- bzoj2561 最小生成树
- sas 文件传输 本地 服务器,SLIM SAS SFF-8654服务器转换线让传输更容易!
- echarts 环形图中间添加html,echarts配置一个中间显示文字的环形图
- C#将Access数据库导出为JSON
- 陆上物探测量基本理论之一---高程
- iphone升级ios7之后出现蓝框框一直跳的问题
- 魔方Newlife.Cube权限系统的使用及模版覆盖详解
- html超链接 鼠标效果,7种鼠标滑过超链接动画特效
- 无监督学习 半监督学习 #博学谷IT学习技术支持#
- Android中Home键的监听和拦截
- chrome扩展程序_如何实施Chrome扩展程序
- Java对List集合中的对象的某个中文字段按照拼音首字母进行排序
- luogu P3527 [POI2011]MET-Meteors
- 特斯拉DTC运营解读
- JsonParseException: Unexpected character (‘sss‘ (code xxx)): was expecting a colon to separ
- vop破芙工艺-注意事项
- 为什么不建议你使用Mybatis-plus
热门文章
- [开学季]“当高校遇到大数据”濮阳职业技术学院阿里云大数据应用学院举行阿里云开学第一课...
- jackson 实体转json 为NULL或者为空不参加序列化
- Linux之文件管理命令
- 学习如何看懂SQL Server执行计划(三)——连接查询篇
- 恐怖的shell命令
- STP 简介----生成树算法
- LeetCode--014--最长公共前缀(java)
- vue开发使用vue-particles如何兼容IE11?
- SQL Server通过web方式进行远程维护,管理
- 《Web接口开发与自动化测试 -- 基于Python语言》 ---前言