C#事物
使用事物的原因:
- 例子:张三向李四汇款,张三账户要有一条汇款记录,李四账户里也要有入账记录,这两条sql必须同时执行,要么同时失败,要么同时成功。
事物是一个工作单元,如果一个事物成功,那么里面的所有sql语句都会提交执行,如果有错误就会回滚。
代码:
//准备连接字符串
string str = "data source=.;initial catalog=wewew;uid=sa;pwd=123";
/// <summary>
/// 如果成功就返回1;失败就返回0
/// </summary>
/// <param name="name"></param>
/// <returns></returns>
public int Thing( string name)
{
//创建数据库连接对象
SqlConnection con = new SqlConnection(str);
//sql语句
string sql = " insert into Users (Name,Pwd) Values ('"+name+ "','123'); UPDATE Users SET Name='李四' WHERE id = 11";
//创建SqlParameter对象设置参数
SqlParameter sp = new SqlParameter("@name", name);
//创建命令对象
SqlCommand cmd = new SqlCommand(sql, con);
//通过Parameters集合的add方法填充参数集合
cmd.Parameters.Add(sp);
//打开链接
con.Open();
//默认让SqlTransaction对象为空
SqlTransaction trans = null;
//开启事务:标志着事物的开始
trans = con.BeginTransaction();
try
{
//将SqlTransaction分配给要执行的SqlCommand和Transaction属性
cmd.Transaction = trans;
//执行sql如果成功就返回1
int count = cmd.ExecuteNonQuery();
if(count>0)
{
//执行成功事物提交
trans.Commit();
return 1;
}
else
{
//执行失败事物回滚
trans.Rollback();
return 0;
}
}
catch (Exception)
{
//若出现错误就回滚事务
trans.Rollback();
return 0;
}
finally
{
//释放cmd占用的资源
cmd.Dispose();
//关闭与数据库之间的链接
con.Close();
//释放con所占用的资源
con.Dispose();
}
}