事务(Transaction)是并发控制的单位,是用户定义的一个操作序列。这些操作要么都做,要么都不做,是一个不可分割的工作单位。通过事务,SQL Server能将逻辑相关的一组操作绑定在一起,以便服务器保持数据的完整性。在sql server+ .net 开发环境下,有两种方法能够完成事务的操作,保持数据库的数据完整性;一个就是用sql存储过程,另一个就是在ADO.NET中一种简单的事务处理;现在通过一个典型的银行转账的例子来说明一下这两个例子的用法我们先来看看sql存储过程是如何来完成事务的操作的:首先创建一个表:create database aaaa --创建一个表,包含用户的帐号和钱数gouse aaaacreate table bb( ID int not null primary key, --帐号 moneys money --转账金额)insert into bb values ('1','2000') --插入两条数据insert into bb values ('2','3000')用这个表创建一个存储过程:
create procedure mon --创建存储过程,定义几个变量
@toID int, --接收转账的账户
@fromID int , --转出自己的账户
@momeys money --转账的金额
as
begin tran --开始执行事务
update bb set moneys=moneys-@momeys where ID=@fromID -执行的第一个操作,转账出钱,减去转出的金额
update bb set moneys=moneys+@momeys where ID=@toID --执行第二个操作,接受转账的金额,增加
if @@error<>0 --判断如果两条语句有任何一条出现错误
begin rollback tran –开始执行事务的回滚,恢复的转账开始之前状态
return 0
end
go
else --如何两条都执行成功
begin commit tran 执行这个事务的操作
return 1
end
go
接下来看看C#.net 是如何调用这个存储过程的:
protected void Button1_Click(object sender, EventArgs e)
{
SqlConnection con =new SqlConnection(@"Data Source=.\SQLEXPRESS;database=aaaa;uid=sa;pwd=jcx"); //连接字符串
SqlCommand cmd = new SqlCommand("mon",con); //调用存储过程
cmd.CommandType = CommandType.StoredProcedure;
con.Open();
SqlParameter prar = new SqlParameter();//传递参数
cmd.Parameters.AddWithValue("@fromID", 1);
cmd.Parameters.AddWithValue("@toID", 2);
cmd.Parameters.AddWithValue("@momeys",Convert.ToInt32( TextBox1.Text) );
cmd.Parameters.Add("@return", "").Direction = ParameterDirection.ReturnValue;//获取存储过程的返回值
cmd.ExecuteNonQuery();
string value = cmd.Parameters["@return"].Value.ToString();//把返回值赋值给value
if (value == "1")
{
Label1.Text = "添加成功";
}
else
{
Label1.Text = "添加失败";
}
}
这个也就是在存储过程里添加事务,再来看看不在数据库写sql存储过程,ADO.NET是如何处理事务的:
protected void Button2_Click(object sender, EventArgs e)
{
SqlConnection con = new SqlConnection(@"Data Source=.\SQLEXPRESS;database=aaaa;uid=sa;pwd=jcx");
con.Open();
SqlTransaction tran = con.BeginTransaction();//先实例SqlTransaction类,使用这个事务使用的是con 这个连接,使用BeginTransaction这个方法来开始执行这个事务
SqlCommand cmd = new SqlCommand();
cmd.Connection = con;
cmd.Transaction = tran;
try
{
//在try{} 块里执行sqlcommand命令,
cmd.CommandText = "update bb set moneys=moneys-'" + Convert.ToInt32(TextBox1.Text) + "' where ID='1'";
cmd.ExecuteNonQuery();
cmd.CommandText = "update bb set moneys=moneys+' aa ' where ID='2'";
cmd.ExecuteNonQuery();
tran.Commit();//如果两个sql命令都执行成功,则执行commit这个方法,执行这些操作
Label1.Text = "添加成功";
}
catch
{
Label1.Text = "添加失败";
tran.Rollback();//如何执行不成功,发生异常,则执行rollback方法,回滚到事务操作开始之前;
}
}
分享到:
相关推荐
每个 SQL Server 数据库都有事务日志,用于记录所有事务以及每个事务所做的数据库修改。 你是否想读取和分析SQL Server日志文件 (.ldf) ?正找不到合适的软件呢?以上一款强大的sql数据库日志分析工具,可以轻松打开...
### SQL Server事务基本使用方法详解 #### 一、事务的概念及使用 事务(Transaction)是数据库操作中的一个重要概念,尤其在SQL Server中,它是保证数据完整性和一致性的重要机制。事务被视为一系列操作的集合,...
本篇将深入探讨SQL Server事务日志的原理,以及如何利用`fn_dblog`这个系统存储过程来查询和解析事务日志。 事务日志是SQL Server中的一个关键组成部分,它跟踪数据库中每个事务的所有更改。每次数据修改时,这些...
该文档从sqlserver事务讲起,详述ACID,@@trancount,在嵌套事务中使用保存点,命名事务等
在SQL Server中,事务是确保数据一致性的重要机制,特别是在存储过程中。存储过程是一组预编译的SQL语句,可以在数据库中被多次调用,提高了效率并降低了网络流量。本篇将详细介绍如何在SQL Server存储过程中使用...
SQL Server提供四种事务隔离级别:读未提交(Read Uncommitted)、读已提交(Read Committed)、可重复读(Repeatable Read)和串行化(Serializable)。 ### 持久性(Durability) 一旦事务提交,其结果就是永久性...
本文将详细介绍三种常见的SQL Server事务日志压缩与删除的方法。 #### 方法一:使用`BACKUP LOG`与`DBCC SHRINKFILE` **步骤一:** 首先,可以使用`BACKUP LOG`命令来备份事务日志,以便之后进行清理或压缩。这里...
在WindowsApplicationTran项目中,可能包含了基于这两种方法实现的示例代码,用于演示如何在C#窗体应用程序中调用SQL Server事务。通过实践这些示例,开发者可以更好地理解和掌握如何在实际应用中保证数据操作的正确...
SQL Server 2000支持三种事务模式:自动提交事务、显式事务和分布式事务。 1. 自动提交事务:这是默认的事务模式,每条SQL语句都作为一个单独的事务执行。一旦语句成功,事务就会提交;如果出现错误,事务则回滚。 ...
快速清除SQLServer日志的两种方法 本文将详细介绍快速清除SQLServer日志的两种方法,包括清空日志和删除LOG文件,并且对每种方法进行了详细的解释和操作步骤。 清空日志 清空日志是快速清除SQLServer日志的第一种...
SQL Server中的事务日志是数据库管理系统的关键组成部分,它在确保数据的持久性和事务一致性方面扮演着核心角色。事务日志的物理结构主要由虚拟日志文件(Virtual Log Files, VLFs)组成,这些文件是日志文件的逻辑...
4. 配置 SQLServer 日志传送:在主数据库服务器上配置日志传送,包括配置安全性、服务器身份验证模式和服务器代理帐户等。 5. 配置从数据库服务器:在从数据库服务器上配置辅助数据库实例和数据库,包括初始化辅助...
综上所述,处理SQL Server中事务日志文件过大的问题,需要综合考虑日志文件的增长原因以及实际业务需求,灵活运用日志截断和日志收缩两种方法。此外,合理规划恢复模式、定期备份事务日志以及密切关注日志文件的变化...
在 Delphi 这样的集成开发环境中,与 SQL Server 数据库进行交互时,事务处理尤为重要。本篇将深入探讨 Delphi 配合 SQL Server 实现事务处理的相关知识点,并通过实例来演示如何在 Delphi 应用程序中运用。 首先,...
SqlServer2008R2数据库驱动包是针对微软SQL Server 2008 R2版本的一个关键组件,它使得应用程序能够通过Java编程语言与SQL Server进行通信。驱动包包括两个不同版本的Java Archive (JAR) 文件,分别对应于JDBC(Java...
SQL Server事务日志是数据库中一个非常重要的组件,它记录了数据库中的所有事务操作,包括插入、更新、删除等操作。然而,在实际使用中,事务日志可能会出现满的问题,从而影响数据库的性能和稳定性。 造成事务日志...
关于SQL Server事务日志的问题汇总,本文将深入探讨在处理SQL Server数据库时,与事务日志相关的常见问题及其解决方案。事务日志是SQL Server数据库的关键组成部分,用于记录所有数据更改,确保数据的一致性和完整性...
2. **隐式事务**:当用户没有显式地定义事务时,SQL Server 自动为每个语句创建的事务。 3. **嵌套事务**:在一个事务内部启动另一个事务。 #### 三、设置 AutoCommit 模式 在 SQL Server 2000 中,`AutoCommit` ...
通过对这些脚本的执行和分析,可以深入理解SQL Server事务管理的机制和实际应用。 总之,SQL Server的事务管理涉及一系列复杂机制,包括事务的ACID属性、隔离级别选择、并发控制以及死锁的预防和解决。通过阅读博客...
Connection conn = DriverManager.getConnection("jdbc:sqlserver://localhost:1433;databaseName=myDatabase", "myUsername", "myPassword"); ``` 其中,`localhost:1433`是SQL Server默认监听的IP和端口,`...