目录
教学资源
教学运行
提醒实验7: 事务处理 返回
实验课程:
C#数据库系统开发
开课学院:
商学院
开课专业:
信息管理与信息系统
教材:
软件:
实验指导:
实验介绍

实验7:  事务处理

一、实验名称和性质

 

所属课程

C#数据库系统设计

实验名称

事务处理

实验学时

2

实验性质

□验证  □综合 □设计

必做/选做

□必做 □选做

 

二、实验目的

1.        掌握事务的特点。

2.        SQL SERVER中处理事务的方法。

3.        C#中处理事务的机制。

 

三、实验的软硬件环境要求

硬件环境要求:

         PC机(单机)

 

使用的软件名称、版本号以及模块:

         Windows XP下的SQL Server 2005(或 SQL Server 2008

四、知识准备

SqlTransaction

初始化SqlTransaction类时,你需要使用SqlConnection类的BeginTranscation()方法:

SqlTransaction myTran; myTran=myConn.BeginTransaction();

v  SqlTransaction的主要方法

Commit(),提交事务

Rollback(),回滚事务

Save(),在事务中创建保存点(它可用于回滚事务的一部分),并指定保存点名称。

 

五、实验内容

1. 建立数据库trDemo(验证性试验)

CREATE TABLE bOneUser(

  userID varchar(20) NOT NULL,

  balance money NULL)

insert into bOneUser values(‘Kevin’,1000)

insert into bOneUser values(‘zxx’,500)

(2)建立窗体项目,窗体中建立控件及属性如下表。

控件

属性名

属性值

文本框1

Name

txtFromUser

文本框2

Name

txtToUser

文本框3

Name

txtTransferMoney

命令按钮1

Name

btnTransfer

Text

转账

单击“转账”按钮,将钱从txtFromUser账户中转相应金额到txtToUser输入的账户中。

3)编写btnTransfer-Click()事件代码

Sub void btnTransfer-Click()

{

string strConn = @"server=.\sqlexpress;database=trDemo;integrated security=true";

            SqlConnectionconn = new SqlConnection(strConn);

            conn.Open();

            SqlTransactiontr = conn.BeginTransaction();

            stringstrUpdate1 = "update bOneUser set balance=balance-@balance where userId=@userID";

            SqlCommandcmd = new SqlCommand(strUpdate1, conn);

            cmd.Transaction = tr;

            cmd.Parameters.AddWithValue ("@UserID", txtFromUser.Text);

            cmd.Parameters.AddWithValue ("@balance", int.Parse(txtTransferMoney.Text));

 

            stringstrUpdate2 = "update bOneUser set balance=balance+@balance where userId=@userID";

            SqlCommandcmd2 = new SqlCommand(strUpdate2, conn);

            cmd2.Transaction = tr;

            cmd2.Parameters.AddWithValue ("@UserID", txtToUser.Text);

            cmd2.Parameters.AddWithValue ("@balance", int.Parse(txtTransferMoney.Text));

                int i,j;

            try

            {

                j=cmd.ExecuteNonQuery();

               i=cmd2.ExecuteNonQuery();

               if (i==1 && j==1)
                {

                tr.Commit();  MessageBox.Show("transfered");}

else

{  tr.Rollback();MessageBox.Show("transfer is failed"); }

              

            }

            catch(SqlException ex)

            {

                tr.Rollback();

                MessageBox.Show("transfer is failed");

            }

}

输入正确:从Kevin200zxx.

输入错误的:从zxx400Daisy. 

写出数据库中的数据情况。

 

如果Kevin2000zxx程序执行情况是什么?符合银行转账要求吗?

 

 

2.建立数据表。

CREATE TABLE bTwoUser(

       userID varchar(20) NOT NULL,

       balance money  NULL)

insert into bTwoUser values(‘Liuxiang’,1000)

insert into bTwoUser values(‘Daisy’,500)

编写与1同样的界面。转账时从bOneUser中的txtFromUser账户中转输入的金额到bTwoUser 表中的txtToUser账户中。

测试:(1)bOneUserKevin帐号转200bTwoUserDaisy帐号中。

(2)bOneUserzxx帐号转400bTwoUserKevin帐号中。

 

 

3. C表中增加selectedNum字段,用来记录选修该课程的选修学生人数。在界面上删除SC表中一条记录时,要C表中将该课程的selectedNum减去1.(由于在SC表中删除记录和在C表中修改该课程的selectedNum要么都执行,要么回滚。用事务处理来完成。)

Sql server中在student数据库中执行下面T-SQL代码。

alter table c add selectedNum int

update C set selectedNum=(select COUNT(sno) from SC where Cno=c.cno)