事务在.net中的运用
事务可以避免因某种原因而导致数据的错误,确保插入数据最终结果的确定性和数据的一致性
我们一般首先通过SqlTransaction对象的BeginTransaction方法创建名为st的SqlTransaction对象,然后将对象分配给SqlCommand对象的Transaction属性,最后通过该对象的Commit方法提交事务,利用SqlTransaction对象的Rollback方法回滚事务。
下面举了一个我项目中用到的例子:
1 #region 插入个人的详细信息
2 public static bool Insert_Userinformation(int userid,string name,string title,string address1,string address2,string workplace,string profession,string address3,string postcode,string email,string phone,string mobilephone,string docaddress)
3 {
4 bool bol = false;
5 SqlConnection conn = SqlConnect();
6 try
7 {
8 conn.Open();
9 SqlTransaction st = conn.BeginTransaction(); //通过SqlConnection的BeginTransaction方法创建st对象
10 SqlCommand cmd = conn.CreateCommand();
11 cmd.CommandText = "insert_userinformation";
12 cmd.Transaction = st; //将SqlTransaction对象分配给SqlCommand对象的Transaction属性
13 cmd.CommandType = CommandType.StoredProcedure;
14 try
15 {
16 cmd.Parameters.Add(new SqlParameter("@userid", userid));
17 cmd.Parameters.Add(new SqlParameter("@name", name));
18 cmd.Parameters.Add(new SqlParameter("@title", title));
19 cmd.Parameters.Add(new SqlParameter("@address1", address1));
20 cmd.Parameters.Add(new SqlParameter("@address2", address2));
21 cmd.Parameters.Add(new SqlParameter("@workplace", workplace));
22 cmd.Parameters.Add(new SqlParameter("@profession", profession));
23 cmd.Parameters.Add(new SqlParameter("@address3", address3));
24 cmd.Parameters.Add(new SqlParameter("@postcode", postcode));
25 cmd.Parameters.Add(new SqlParameter("@email", email));
26 cmd.Parameters.Add(new SqlParameter("@phone", phone));
27 cmd.Parameters.Add(new SqlParameter("@mobilephone", mobilephone));
28 cmd.Parameters.Add(new SqlParameter("@docaddress", docaddress));
29 int count = Convert.ToInt32(cmd.ExecuteNonQuery());
30 st.Commit(); //提交事务
31 if (count >= 1)
32 {
33 bol = true;
34 }
35 else
36 {
37 bol = false;
38 }
39 }
40 catch (Exception error)
41 {
42 st.Rollback(); //回滚事务
43 }
44 }
45 catch (Exception ex)
46 {
47 Debug.Fail(ex.Message);
48 }
49 finally
50 {
51 if (conn.State == ConnectionState.Open)
52 {
53 conn.Close();
54 }
55 }
56 return bol;
57 }
58 #endregion
个人觉得在论坛和博客的注册中,事务还是很重要的!
浙公网安备 33010602011771号