sql事务处理(转)
在很多的项目开发中会遇到这样的情况:比如论坛注册用户,注册成功是分为两个部分的,第一个部分是先向用户表里插入一条记录,再向操作日志表里插入一条记录.这样要分为两步走,因为只有在第一条插入成功后才能执行第二条语句.万一第一条成功了,在执行第二条的时候遇到突发事件,如电脑死机了,停电了等.系统应该把此用户的状态回复到注册前的状态.也就是说此用户注册不成功...
要实现以上的功能,就需要用到sql的事务处理了.下面给个简单的实例:
SqlConnection con = new SqlConnection("server=(local);DataBase=db;User ID=sa;PWD=");
con.Open();
SqlTransaction st = con.BeginTransaction();//通过SqlConnection的BeginTransaction方法创建名为st的对象Transaction
SqlCommand com = con.CreateCommand();
com.Transaction = st;//将SqlTransaction对象分配给SqlCommand对象的Transaction属性
try
{
//向用户表中插入注册信息
com.CommandText = "";//这里省略了插入语句,你要自己写了.呵呵....
com.ExecuteNonQuery();
//向日志表中插入数据
com.CommandText = "";//这里也省略了插入语句,你也要自己写了.呵呵....
com.ExecuteNonQuery();
st.Commit();//提交事物
Response.Write("<script>alert('注册成功!');location='javascript:history.go(-1)'</script>");
}
catch (Exception error)
{
st.Rollback();//回滚事物
}
要实现以上的功能,就需要用到sql的事务处理了.下面给个简单的实例:
SqlConnection con = new SqlConnection("server=(local);DataBase=db;User ID=sa;PWD=");
con.Open();
SqlTransaction st = con.BeginTransaction();//通过SqlConnection的BeginTransaction方法创建名为st的对象Transaction
SqlCommand com = con.CreateCommand();
com.Transaction = st;//将SqlTransaction对象分配给SqlCommand对象的Transaction属性
try
{
//向用户表中插入注册信息
com.CommandText = "";//这里省略了插入语句,你要自己写了.呵呵....
com.ExecuteNonQuery();
//向日志表中插入数据
com.CommandText = "";//这里也省略了插入语句,你也要自己写了.呵呵....
com.ExecuteNonQuery();
st.Commit();//提交事物
Response.Write("<script>alert('注册成功!');location='javascript:history.go(-1)'</script>");
}
catch (Exception error)
{
st.Rollback();//回滚事物
}