sqltransaction 如何隔离多个事务(什么是数据库事务什么是数据库脏数据并发控制技术有哪些数据库恢复)

本文目录
什么是数据库事务什么是数据库脏数据并发控制技术有哪些数据库恢复
事务是一系列的数据库操作,是数据库应用程序的基本逻辑单元,也是恢复和并发控制的基本单位。事务处理技术主要包括数据库恢复技术和并发控制技术。本篇博文主要总结下并发控制技术。
事务:是用户定义的一个数据库操作序列,这些操作要么全做,要么全不做,是一个不可分割的工作单位。例如,在关系数据库中,一个事务可以是一条SQL语句、一组SQL语句或整个程序。一般来说,一个程序中包含多个事务。
ACID,是指在可靠数据库管理系统(DBMS)中,事务(transaction)所应该具有的四个特性:
A:原子性(Atomicity): 事务是一个或多个行为捆绑在一起组成一个单独的工作单元,事务中的动作要不都发生,要不都不发生。
C:一致性(Consistent): 即在事务开始之前和结束之后,数据库的完整性约束没有被破坏。
数据库层面:在一个事务执行前和执行后,数据会符合你设置的约束(例如unique约束,foreign key约束,check约束等)和触发器设置.由数据库进行保证.
.NET C#事务处理
SqlConnection con = new SqlConnection(ConnectionDb.conStr);//获取数据库连接
con.Open();//打开连接
SqlTransaction sqltra = con.BeginTransaction();//开始事务
SqlCommand cmd = new SqlCommand();//实例化
cmd.Connection = con;//获取数据连接
cmd.Transaction = sqltra;//,在执行SQL时,
try
{
string sql = "insert into OA_MEETING(meeting_id,meeting_name,meeting_title,start_time,end_time,announce_time,explain,reg_emp_id,emc_emp_id,par_emp_id,rep_emp_id,participate,MEETING_TYPE,PROJ_ID,WORK_ID)values(’" + id + "’,N’" + meetname + "’,N’" + meettitle + "’,’" + starttime + "’,’" + endtime + "’,N’" + djtime + "’,N’" + meetinfo + "’,’" + empid + "’,’" + meetperson + "’,’" + lname + "’,’" + writer + "’,’" + ccname + "’,’" + hidsort.Value + "’,’" + proid + "’,’" + workid + "’)";
cmd.CommandText = sql;
cmd.ExecuteNonQuery();
//string meetid = id;
int size = 0;
HttpFileCollection files = HttpContext.Current.Request.Files;
//遍历上传文件窗体所有Html控件
foreach (string NameId in Request.Form)
{
//找到控件ID名前四位为"txt_"的文件说明文本框
if (NameId.Substring(0, 4) == "ttx_")
{
//获取文本说明
if (Request.Form != "")
{
string Explain = Request.Form;//获取txt文本说明
HttpPostedFile pstfile = files;
string fileName = "";
string fileExtension = "";
fileName = System.IO.Path.GetFileName(pstfile.FileName);//上传的文件全名
fileExtension = System.IO.Path.GetExtension(fileName);//扩展名
string NewName = fileName.Remove(fileName.LastIndexOf("."));//去掉后缀名的文件名
string sql1 = "select isnull(max(app_id),0) from OA_MEETING_APPENDIX";
int idd = Convert.ToInt32(objConnction.getString(sql1)) + 1;
ua.Folder_Exists("Meeting");
string filepath = "..\\AtthFiles\\Meeting\\Meeting_" + idd.ToString() + fileExtension;
string sqlstr1 = "insert into OA_MEETING_APPENDIX(APP_ID,MEETING_ID,EXPLAIN,APP_PATH) values(’" + idd + "’,’" + id + "’,N’" + Explain + "’,N’" + filepath + "’)";
cmd.CommandText = sqlstr1;
int num = cmd.ExecuteNonQuery();
if (num 》 0)
{
pstfile.SaveAs(Server.MapPath("..\\AtthFiles\\Meeting\\Meeting_" + idd.ToString() + fileExtension));
size = pstfile.ContentLength / 1024;
objDocument.InsertDoc(5, idd, Explain, "", "", DateTime.Now.ToString("yyyy-MM-dd"), Convert.ToInt32(HempID.Value), filepath, size, hidwork.Value, hidpro.Value);
}
}
}
}
sqltra.Commit();
}catch(Exception ex)
{
sqltra.Rollback();
}
VBA 怎样执行多个SQL语句
Dim conn as New SqlConnection(连接字符串)
Dim cmd as new sqlcommand
cmd.CommandType = Text 或者SqlProcedure
cmd.Connection = conn
cmd.TimeOut= 30
cmd.CommandText = "Update ........." 或者 "Select ..... "
’’ 用来执行操作用这个
cmd.ExecuteNoQuery
’’ 得到数据用这个
Dim table as new datatable
Dim ad as new DataAdapter (cmd)
ad.Fill(table)
控件.DataSource = table
如果是多条操作的话,需要用到SqlTransaction, 即事务操作。
Dim Tran as SqlTransaction = conn.BeginTransaction
...
....
’’ 执行完毕后
Tran.Commit()
’’如果执行有错误
Tran.Rollback()
ASP.NET中的事务处理和异常处理
使用SQL Transaction类和 NET提供的异常处理机制 我们就能够以一种可靠的方式处理数据库运行中的问题和发现系统异常 这篇小文章将解释事务处理和异常处理的概念和用法
一 什么是事务?
事务处理是由以一个单一的逻辑单位完成的一系列操作 它可以由一系列的SQL语句 SELECT INSERT UPDATE DELETE组成 如果在该单位包含的操作执行完毕后没有发生错误 那么它对数据库所作的改变就是永久的了 如果一旦有错误发生 它就不会对数据库作任何修改或改变
要定义一个事务 需要使用Begin tran命令 在这一命令之后的任何语句都将被认为是事务的一部分 命令Commit用来完成事务 并使事务对数据库所作的修改成为永久的 Rollback命令用来取消一个事务 并还原事务对数据库所作的修改
下面是一个事务的例子
BEGIN TRAN INSERT INTO PRODUCT(PRODUCTID PRODUCTNAME) VALUES( KEYBOARD ) UPDATE PRODUCT SET PRICE= WHERE PRODUCTID= IF (@ERROR》 ) ROLLBACK ELSE MIT
二 什么是异常处理?
开发一种错误消息处理机制 并向用户提供有用的 清楚 有意义的信息也是编程人员的任务之一 异常处理就是能够提供这一服务的一种机制 一旦事务失败 服务器就会向系统发出一个用于帮助用户发现并修复邦联的数据库错误信息 我们可以异常处理功能来获取这种异常信息 并修复出现的故障 异常处理功能的用法如下所示
try{//数据库操作命令}catch (Exception e){?//如果有异常发生 这部分语句将被执行}finally{?//无论是否有异常发生 这部分语句都会得到执行} 三 如何实现事务?
在一个存储过程中编写事务语句 并使用下面的控制发现是否有错误发生 返回相应的值 互联网应用程序会根据返回的值显示正确的和容易理解的错误信息 下面是一个事务的例子
CREATE PROCEDURE PRODUCT_SAVE( ASDECLARE(@USERID CHAR( ) @LOCATION VARCHAR( ) @RETURNS INT OUTPUT)BEGIN TRANUPDATE ADDRESS SET LOCATION=@LOCATION WHERE USERID=@USERIDIF (@@ERROR》 )BEGIN@RETURNS= /* Fail to Update */ROLLBACKENDELSE@RETURNS= /* Succeed to update */MIT
RETURN @RETURNS
int values;DBClass dbc=new DBClass(); // 使用new命令生成一个数据库类values=dbc updatedb( Rain Street ); //And call its function member to update recordif (values== )Lable_message text= Update successfully ;elseLable_message text= Sorry can not update this record please contact your DBA
上面的例子非常适合DBA等对数据库编程非常熟悉的编程人员 他们更喜欢在存储过程中完成异常处理功能 如果对数据库编程不太熟悉 则可以采取下面的方法
在 NET框架中 我们可以使用SqlTransaction类定义一个事务 此后 我们就可以使用mit或rollback函数控制事务 当然了 我们也可以使用 NET框架提供的异常处理功能获取系统异常 下面是一个有关的例子
SqlConnection myConnection = new SqlConnection( Data Source=localhost;Initial Catalog=Northwind;Integrated Security=SSPI; );myConnection Open();
SqlTransaction myTrans = myConnection BeginTransaction(); //使用New新生成一个事务SqlCommand myCommand = new SqlCommand();myCommand Transaction = myTrans;
try{myCommand CommandText = Update Address set location= rain street where userid= ;myCommand ExecuteNonQuery();myTrans Commit();Console WriteLine( Record is udated );}catch(Exception e){myTrans Rollback();Console WriteLine(e ToString());Console WriteLine( Sorry Record can not be updated );}finally{myConnection Close();}
lishixinzhi/Article/program/net/201311/15760SQL同时插入多张表
通过事务来实现,也就是说,SqlCommand的CmdText属性在一个方法当中可以赋多个SQL语句
SqlConnection sqlConnection = new SqlConnection();
...初始化连接
// 开启事务
SqlTransaction sqlTransaction = sqlConnection.BeginTransaction();
// 将事务应用于Command
SqlCommand sqlCommand = new SqlCommand();
sqlCommand.Connection = sqlConnection;
sqlCommand.Transaction = sqlTransaction;
sqlCommand.CmdText=第一个sql语句
sqlCommand.ExcuteNoneQuery();
sqlCommand.CmdText=第二个sql语句
sqlCommand.ExcuteNoneQuert();
try
{
// 利用sqlcommand进行数据操作
...
// 成功提交
sqlTransaction.Commit();
}
catch(Exception ex)
{
// 出错回滚
sqlTransaction.Rollback();
}
如果在执行第二次SQL语句是出错了,那么就会到Catch异常中,执行回滚,那么第一次执行的也同样回滚了,所以必须2个都一行成功才往数据库中提交
这里是用了2次SQL语句,如果你想用1个语句同时操控2个表的话,就要用到存储过程或者是触发器,存储过程和触发器你如果想知道的话加QQ吧:312976625,我给你讲.

更多文章:
全球新冠肺炎疫情背景下航运发展(盐田港复苏日志:半年历劫从“低谷”到“爆仓” 疫情之后巨轮如何越洋航行)
2026年9月7日 17:10
matlab求解带字母参数方程组(我想matlab求一个关于x,y的方程组 ab c d f e h m n 都是参数)
2026年9月7日 16:30
oracle中的循环语句(下面哪个不是oracle程序设计中的循环语句 a for)
2026年9月7日 15:30
电脑里2个系统怎么删除一个(电脑开机显示有两个系统,如何删除一个)
2026年9月7日 12:20
scrollthrough意思(“scroll”是什么意思)
2026年9月7日 08:00
怎么激活keygen(注册机如何激活cad2008一个简单激活cad2008的方法)
2026年9月7日 06:30



