首页 > 范文大全 > 正文

事务在C#中的应用

开篇:润墨网以专业的文秘视角,为您筛选了一篇事务在C#中的应用范文,如需获取更多写作素材,在线客服老师一对一协助。欢迎您的阅读与分享!

摘要:在数据库中,要求数据保持一致。在数据操作过程中,可能会出现一条或一组语句因为意外故障而被迫中断执行得情况,这就有可能导致数据库中数据不一致的问题。而事务则是解决这一问题的有效方法。该文先对事务进行简单介绍,然后通过实例的方式介绍其在c#中的具体应用

关键词:事务;C#;应用

中图分类号:TP311文献标识码:A文章编号:1009-3044(2012)08-1827-03

Transactions of the Application in the C#

LIN Qin-hua

(Sichuan Information Technical College, Guangyuan 628017, China)

Abstract: In the database, the data is consistent. One or a set of statements may appear in the data manipulation process, because of unexpected failures forced to interrupt performs situation, which is likely to result in inconsistent data in the database. Transactions is an effective way to solve this problem. The article focuses on the affairs of a brief introduction, and then introduced through the examples of the way its specific application in C #.

Key words: transaction; C#; application

1事务简介

1.1事务的定义

事务(Transaction)是并发控制的单位,是用户定义的一个操作序列。这些操作要么都做,要么都不做,是一个不可分割的工作单位。通过事务,SQL Server能将逻辑相关的一组操作绑定在一起,以便服务器保持数据的完整性。例如,银行的转帐业务,将A帐号的500元钱转入B帐号。银行工作人员将从A帐号中取出500元,然后将这500元存入B帐号。这两个操作应该作为一个事务来处理,要么都做,要么都不做。

1.2事务的特性

事务有4个特性,即原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持续性/永久性(Durability),简称ACID特性。

1)原子性(Atomicity)

事务是数据库的逻辑工作单位,事务中包括的各操作要么都做,要么都不做。

2)一致性(Consistency)

事务执行的结果必须是使数据库从一个一致性状态变到另一个一致性状态。一致性与原子性是密切相关的。

3)隔离性(Isolation)

一个事务的执行不能被其他事务干扰。

4)持续性/永久性(Durability)

一个事务一旦提交,它对数据库中数据的改变就应该是永久性的。

2事务在C#中的应用

2.1提出问题

在一个学生选课系统中,用户的权限有管理员、一般用户和学生用户这三种。而对于学生用户这个权限的用户信息,是在一般用户添加一条学生信息的同时,在用户表中也添加一条学生用户信息。即这2个添加操作应该作为一个事务来处理。

2.2数据准备

为了完成上述提出的问题,应先在SQL Server中准备用户信息表和学生信息表。实现的SQL语句如下。--创建用户表

create table Users

(

UserName varchar(20) not null,--用户名

UserPassword varchar(30) not null,--用户密码

UserPower varchar(20) not null--用户权限

)

--创建学生表

create table Student

(

StuID char(7) not null primary key,--学号

StuName varchar(20) not null,--学生姓名

StuSex char(2) not null,--学生性别

StuBirthday datetime--学生出生日期

)

2.3在C#中实现添加

在本例中,采用VS 2008+SQL Server2005来实现。要在VS中对数据库进行操作,首先要连接上数据库,而操作结束后,要及时关闭数据库。在此例中,自定义两个方法:OpenDB()和CloseDB(),分别用来打开和关闭数据库,具体代码如下。

private string strConnString = "server=.;database=BookMIS;uid=sa;pwd=sasasa";

private SqlConnection strConn = new SqlConnection();

//连接数据库

private void OpenDB()

{if (strConn.State == ConnectionState.Closed)

{strConn.ConnectionString = strConnString;

strConn.Open();

}}

//关闭数据库

private void CloseDB()

{if (strConn.State == ConnectionState.Open)

{strConn.Close();

}}

在该例中,采用Windows应用程序实现,在项目中,添加2个窗口,分别对用户信息和学生信息进行操作。在这2个窗口中,各添加一个DataGridView控件,并使用BandGrid()方法把对应表的信息绑定到该控件,以方便数据的查看。

图1学生信息管理窗口

1)使用SQL Server的事务来实现添加功能

SQL Server2005对事务提供了很好的支持,我们直接使用SQL语句来定义、提交以及回滚一个事务。在进行了非空性和惟一性验证后,添加功能的代码如下:

string strTran="declare @tran_name1 varchar(20) ";

strTran+="select @tran_name1=’T1’ ";

strTran += "begin tran @tran_name1 ";

strTran+="begin try ";

图2用户信息管理窗口

strTran+=" insert into Student values(’"+txtStuID.Text.Trim()+"’,’"+txtStuName.Text.Trim()+"’,’"+txtStuSex.Text.Trim()+"’,’"+txtStuBirthday.Text.Trim()+"’)";

strTran+=" insert into Users values(’"+txtStuID.Text.Trim()+"’,’123’,’学生用户’)";

strTran+=" end try ";

strTran+=" begin catch";

strTran+=" if @@trancount>0 ";

strTran+=" rollback transaction @tran_name1 ";

strTran+=" end catch ";

strTran+=" if @@trancount>0 ";

strTran+="commit tran @tran_name1";

OpenDB();

SqlCommand cmd=new SqlCommand(strTran,strConn);

if(cmd.ExecuteNonQuery()>0)

{

MessageBox.Show("已经添加!");

BandGrid();

}else

{MessageBox.省略事务处理机制实现添加功能

在.net中,有个专门用于管理数据库事务的类SqlTransaction,该类无法继承。把SqlTransaction类的对象和SqlCommand对象的Transaction属性进行关联。通常,在异常处理的try块中提交事务,而在catch块中回滚。具体代码如下。

string strAdd1 = "insert into Student values(’" + txtStuID.Text.Trim() + "’,’" + txtStuName.Text.Trim() + "’,’" + txtStuSex.Text.Trim() +"’,’" + txtStuBirthday.Text.Trim() + "’)";

string strAdd2 = "insert into Users values(’" + txtStuID.Text.Trim() + "’,’123’,’学生用户’)";

OpenDB();

SqlCommand cmd = new SqlCommand();

SqlTransaction myTran = strConn.BeginTransaction();

cmd.Connection = strConn;

cmd.Transaction = myTran;

try

{mandText = strAdd1 + strAdd2;

cmd.ExecuteNonQuery();

mit();//提交事务

}catch (Exception ex)

{myTran.Rollback();//事务回滚

MessageBox.Show("事务操作错误,已回滚!系统信息" + ex.Message);

}finally

{BandGrid();

CloseDB();

}

3结束语

该文先介绍了事务的概念、特性,然后介绍在C#中使用事务实现学生信息表和用户信息表的添加功能,对事务的初学者有一定的借鉴意义。

参考文献:

[1]李志中.Visual C# 2008数据库编程实训教程[M].北京:清华大学出版社,2010.

[2]杨学全. SQL Server实例教程[M]. 2版.北京:电子工业出版社,2010.

[3]李国庆程序设计项目教程[M].北京:北京理工大学出版社,2010.