测试:
1.SQL查询分析器:
i. create table MyTransactionTest
(
userId int primary key identity
)
ii.
begin transaction TranStart
insert into MyTransactionTest default values
save transaction firstTransaction
insert into MyTransactionTest default values
rollback transaction firstTransaction
insert into MyTransactionTest default values
save transaction secondTransaction
insert into MyTransactionTest default values
rollback transaction secondTransaction
insert into MyTransactionTest default values
commit transaction TranStart
iii.
select * from MyTransactionTest
结果:
2.VS2005
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();//回滚事物
}
修正:
using System;
using System.IO;
public class Test
{
public static void Main()
{
int i = 42;
object o = i;
Console.Write(i + "." + (Int32)o);
Console.ReadLine();
}
}
发生了三个装箱操作、一个拆箱操作,
装箱1:int i = 42;
装箱2:Console.Write()中的第一个参数i,需要由值类型(i)装箱为引用类型,以便于这个方法的原型一致。
拆箱1:(Int32)o;
装箱3:(Int32)o拆箱完成后需要再装箱。
