事务基本概念
程序如何调用事务
使用存储过程来进行包裹
存储过程介绍与使用http://t.csdn.cn/eoedY
目录
数据库中的存储过程包裹事务案例
用户表、部门表创建
Create table tesTable
(
uName varchar(30),
uPwd varchar(30),
age smallint,
deptId smallint
)
create table DeptTable
(
deptId smallint primary key identity(1,1),
deptName varchar(30)
)
存储过程:
create procedure AddUserBytran
@UserName varchar(30),
@UserPwd varchar(30),
@UserAge smallint,
@DeptName varchar(30)
as
begin
begin transaction
begin try
--插入部门信息
Insert into DeptTable(deptName) values(@DeptName)
declare @deptId smallint
select @deptId = @@IDENTITY
--插入用户信息
insert into tesTable(uName,uPwd,age,deptId)
values(@UserName,@UserPwd,@UserAge,@deptId)
commit transaction --提交
return 1;
end try
begin catch
rollback transaction --回滚
return 0;
end catch
end
程序调用存储过程
//调用存储过程
static void testProcedure()
{
string connStr = ConfigurationManager.ConnectionStrings
["connStr"].ConnectionString;
SqlConnection conn = new SqlConnection(connStr);
//调用存储过程
SqlCommand cmd = new SqlCommand("AddUserByTran", conn);
cmd.CommandType = CommandType.StoredProcedure;
//参数调用前清空
cmd.Parameters.Clear();
SqlParameter[] paras =
{
new SqlParameter("@UserName","Peter"),
new SqlParameter("@UserPwd","1234"),
new SqlParameter("@UserAge",23),
new SqlParameter("@DeptName","研发部"),
new SqlParameter("returnValue",SqlDbType.Int,4)
};
paras[4].Direction = ParameterDirection.ReturnValue;//返回值参数
cmd.Parameters.AddRange(paras);
//执行
conn.Open();
cmd.ExecuteNonQuery();
int state = int.Parse(paras[4].Value.ToString());
if(state == 1)
{
Console.WriteLine("执行成功");
}
else
{
Console.WriteLine("执行失败");
}
}
运行结果: