黑马程序员之ADO.NET学习笔记:网络数据的事务处理

时间:2022-03-05 11:57:25

--------------------------------------------------- 2345王牌技术员联盟2345王牌技术员联盟、期待与您交流!---------------------------------------------------------

事务处理是为了防止在网络上多用户对数据库的并发操作破坏数据的一致性和完整性,而事务处理主要通过SqlTransaction对象完成,其主要的方法有:Commit()方法主要负责提交事务处理完成真正的数据库查询更新操作,Rollback()方法主要负责当数据查询更新等数据库操作出现异常时的事务回滚。ADO.NET的事务处理主要通过SqlCommand对象来实现事务对象,代码如下:

using(SqlConnection con = new SqlConnection("Data Source = localhost; Initial Catalog = UserDate; Integrated Security =True"))

        {

                 SqlTransaction transql = null;//申明SqlTransaction对象的实例

                 SqlCommand cmd = new SqlCommand();

                 try

                 {

                             con.Open();//创建数据库链接

                             transql = con.BeginTransaction();//开始事务处理

                             cmd.Connection = con;//设置Command对象的链接

                             cmd.Transaction = transql;//设置Command对象的事务

                             //设置带参数的SQL语句

                             cmd.CommandText = "INSERT INTO b1(name, company, position, shijian)VALUES(@Name, @Company, @Position, @Datetime)";

                             //为参数赋值(注意参数在数据库中的数据类型)

                             cmd.Parameters.Add(new SqlParameter("Name",Name.Text));

                             cmd.Parameters.Add(newSqlParameter("Company", Company.Text));

                             cmd.Parameters.Add(newSqlParameter("Position", Position.Text));

                             cmd.Parameters.Add(newSqlParameter("Datetime", DateTime.Parse(Datetime.Text)));//注意数据类型转换

                             //执行SQL语句

                            cmd.ExecuteNonQuery();

                            //提交事务

                             transql.Commit();

                             Response.Write("添加成功!<br>");

                 }

                 catch

                {

                           //如果程序抛出异常则做事务回滚

                           transql.Rollback();

                 }

}

注:在上面的代码中,特别要注意SqlTransaction的实例接收的是SqlConnection实例的BeginTransaction()的返回值,SqlCommand的实例的Transaction属性接收的是SqlTransaction的实例,即SqlConnection实例的BeginTransaction()的返回值,而整个事务的过程是由SqlCommand实例来书写的,也就是说,在SqlCommand实例里面的代码相对应的事务都由SqlTransaction的实例自动生成,前提是必须要有transql = con.BeginTransaction();cmd.Transaction= transql;这两句代码,最后用SqlTransactionCommit()方法或者Rollback()对事务进行提交或者回滚


--------------------------------------------------- 2345王牌技术员联盟2345王牌技术员联盟、期待与您交流!---------------------------------------------------------