我设计的简单事务控制
类结构图:
相关文件:
接口:IManager.cs IPlanManager.cs
实现:Manager.cs PlanManager.cs
使用:Test.cs
其他相关文件不予说明
Test.cs:测试客户端,可以进行单个功能类内多个方法的事务控制,如果要进行多个功能类的事务控制就需要修改基类Manager中数据库连接的获得方式,目前是简单的获取连接串后直接创建连接,实用时候应该从一个数据库连接工厂类中获得,这样多个Manager类可以共享数据库连接,进行事务控制,并可以有效地管理数据库连接池。
using System.Collections;
using ReceptionPlan.Data.Components;
using ReceptionPlan.Data.IDAL;
using ReceptionPlan.Data.DAL;
namespace ReceptionPlan.Data.Services
{
/**//// <summary>
/// ReceptionPlan 的摘要说明。
/// </summary>
public class ReceptionPlanService
{
public ReceptionPlanService()
{
}
/**//// <summary>
/// 添加计划
/// </summary>
/// <param name="plan">计划对象</param>
/// <returns>计划ID</returns>
public static int AddPlan(Plan plan)
{
IPlanManager pm = new PlanManager();
pm.BeginTransaction();
try
{
int id = pm.AddPlan(plan);
plan.Id = id;
plan.Name = "XXXX";
pm.ModifyPlan(plan)
pm.Commit();
return id;
}
catch(Exception ex)
{
pm.Rollback();
throw ex;
}
}
}
IManager.cs
namespace ReceptionPlan.Data.IDAL
{
/**//// <summary>
/// IManager 的摘要说明。
/// </summary>
public interface IManager
{
void BeginTransaction();
void Rollback();
void Commit();
}
}
IPlanManager.cs
using System.Collections;
using ReceptionPlan.Data.Components;
namespace ReceptionPlan.Data.IDAL
{
/**//// <summary>
/// IPlanManager 的摘要说明。
/// </summary>
public interface IPlanManager : IManager
{
int AddPlan(Plan plan);
int ModifyPlan(Plan plan);
}
}
Manager.cs
using System.Data;
using System.Data.SqlClient;
using System.Collections;
using ReceptionPlan.Data.IDAL;
using ReceptionPlan.Data.Utility;
namespace ReceptionPlan.Data.DAL {
public abstract class Manager : IManager {
protected SqlTransaction trans;
protected SqlConnection conn;
protected ArrayList connList;
public Manager() {
connList = new ArrayList();
}
~Manager() {
if (trans != null)
trans.Rollback();
/**//*
foreach(SqlConnection temp in connList)
{
if(temp !=null && temp.State != ConnectionState.Closed )
temp.Close();
}*/
}
//public SqlConnection Connection
public string Connection {
get {
return Configs.CONN_STR;
/**//*
SqlConnection temp = new SqlConnection(Configs.CONN_STR);
connList.Add(temp);
return temp;
*/
}
}
public void BeginTransaction() {
conn = new SqlConnection(Configs.CONN_STR);
conn.Open();
trans = conn.BeginTransaction();
}
public void Rollback() {
if (trans != null){
trans.Rollback();
trans = null;
conn.Close();
}
}
public void Commit() {
if (trans != null){
trans.Commit();
trans = null;
conn.Close();
}
}
}
}
PlanManager.cs
using System.Collections;
using Microsoft.ApplicationBlocks.Data;
using System.Data;
using System.Data.SqlClient;
using ReceptionPlan.Data.Components;
using ReceptionPlan.Data.IDAL;
using ReceptionPlan.Data.Utility;
namespace ReceptionPlan.Data.DAL
{
/**//// <summary>
/// PlanManager 的摘要说明。
/// </summary>
public class PlanManager : Manager, IPlanManager
{
public PlanManager()
{
}
public int AddPlan(Plan plan)
{
int id = -1;
string sql = string.Empty;
try
{
sql = string.Format("insert into [RP_Plan] XXXX);
object AID = SqlHelper.ExecuteScalar(trans, CommandType.Text, sql );
id = Convert.ToInt32(AID);
}
catch(Exception ex)
{
throw new Exception(ex.ToString() + "\n sql=" + sql);
}
return id;
}
public int ModifyPlan(Plan plan)
{
if (plan.Id < 0)
return -1;
string sql = string.Empty;
int ret = -1;
try
{
sql = string.Format("update RP_Plan XXXX);
ret = SqlHelper.ExecuteNonQuery(trans, CommandType.Text, sql );
}
catch(Exception ex)
{
throw new Exception(ex.ToString() + "\n sql=" + sql);
}
return ret;
}
}
}
转载于:https://www.cnblogs.com/dannyr/archive/2004/11/02/59518.html
我设计的简单事务控制相关推荐
- 51单片机 时间控制的不同时段交通灯控制设计(简单版)
这个交通灯的设计时简单版,只有一个路口(不是十字路口)的那种(想要实现十字路口可以对代码稍加修改) 使用的开发软件:Keil uVision5 单片机类型为:C51 语言类型:C语言 在这里说一下实现 ...
- controller的异常处理以及service层的事务控制___controller层 trycatch不影响service层抛出的异常
controller的异常处理以及service层的事务控制 最近写代码涉及到一些事务,上午终于把代码给理顺了,之前不太清楚在哪里做异常处理,导致代码遍地try-catch,相当难看. 还是基于con ...
- Spring中的事务控制
Chapter 1. Spring中的事务控制(Transacion Management with Spring) Table of Contents 1.1. 有关事务(Transaction)的 ...
- Spring中的事务控制(Transacion Management with Spring)
1.1. 有关事务(Transaction)的楔子 1.1.1. 认识事务本身1.1.2. 初识事务家族成员 1.2. 群雄逐鹿下的Java事务管理 1.2.1. Java平台的局部事务支持1.2.2 ...
- Spring——DAO层、Spring JDBC、Spring事务控制
目录 一.Spring对持久层技术支持 1.Spring支持的持久层技术 2.Spring JDBC 2.1. JDBCTemplate类 2.2.Spring JDBC CRUD操作 2.3.Spr ...
- Spring中的事务控制学习中(转)
1.1. 有关事务(Transaction)的楔子 1.1.1. 认识事务本身 1.1.2. 初识事务家族成员 1.2. 群雄逐鹿下的Java事务管理 1.2.1. Java平台的局部事务支持 1.2 ...
- Spring中的事务控制学习中
Chapter 1. Spring中的事务控制(Transacion Management with Spring) Table of Contents 事务管理(Transaction Manage ...
- Insight Mybatis JdbcTemplate 混合事务控制的实现
混合使用的背景 最近项目中需要引入工作流引擎,实现业务和流程设计.流转的解耦. 工作流流引擎选用的是snaker,轻量.易上手.可定制.访问数据库用的是JdbcTemplate . 项目中原有的持久层 ...
- 【Spring】事务控制API
Spring事务控制需要明确 1. JavaEE体系进行分层开发,事务处理位于业务层,Spring提供了分层设计==业务层==的事务处理解决方案. 2. Spring框架提供了一组事务控制的接口.在S ...
最新文章
- 23岁一无所有怎么办_我搬到国外去创业,然后一无所有。
- 漫谈Google Percolator分布式事务
- 聊聊技术写作的个人体会
- a5d2 phy驱动
- 五一期间,飞鸽传书我又更新了。
- python3.6教程案例分析_python 3.6 --实战Scrapy
- matlab ode45 初值,为什么设定的初值在ode45里无效?
- 企业如何实现大数据分析平台
- 中美线径对照表_中国线径与英美德线规对照表
- 苏教版六年级上册计算机教案,苏教版六年级数学上册最新全册教案
- C语言函数:even(n),fflush(stdin)
- android音乐视频播放器,android音乐视频播放器.doc
- Android 实现搜索历史(1)
- (转)罗振宇跨年演讲:哪来直接登顶的人生,只有不断迭代的历程
- 获取百度首页的源代码
- 华为智能家居app未能连接上远程云服务_智能家居平台介绍:华为HiLink
- python 提取pdf表格_用Python提取pdf文件中的表格数据
- 用python画画的原理_matplotlib绘图的核心原理讲解
- 常用的35个Linux命令合集
- 血性的青,尿性的春——《中国合伙人》影评