事务处理的过程
开始事务,进入事务待命状态--〉记录要改改变的记录,对要改变的记录加锁--〉拷贝加锁的记录--〉
事务更新--〉释放记录锁,抛弃事务日志和备份的记录
事务处理方法:
1)利用数据库处理(例如在存储过程里面)
好处:速度快
例如:
Create Pro SqlTran As
begin tran
declare @errorinfo int
//sql语句
select @errorinfo=@@error
if(@errorinfo=0)
commit tran
else
rollback tran
go
2)在代码里面加入事务处理
好处:独立于数据库
private void Tran(string strconn)
{
SqlConnection conn=new SqlConnection(strconn);
conn.Open();
//启动事务
SqlTransaction tran=conn.BeginTransaction();
//为事务创建命令
SqlCommand cmd=new SqlCommand();
cmd.Connection=conn;
cmd.Transaction=tran;
try
{
cmd.CommandText=//sql语句
cmd.ExecuteNonQuery();
tran.Commit();
}
catch()
{
tran.Rollback();
}
finally
{
conn.Close();
}
}
3)利用COM+来进行事务处理
好处:实现对不同数据库的操作
//建一个类库
//using Syatem.EnterpriseService
//Required:假如事务存在则共享事务,否则创建新事务
[Transaction(TransactionOption.Required,timeout=1200)]
public class ES:ServiceComponet
{
public void db(string username)
{
try
{
strsql="delete from user where username='"+username+"'";
SqlConnection conn=new SqlConnection(strconn);
conn.Open();
SqlCommand cmd=new SqlCommand(strsql);
cmd.ExecuteNonQuery();
ContextUtil.SetComplete();
conn.Close();
}
catch
{
ContextUtil.SetAbort();
}
}
}
对类ES必须要有一个强名称进行签名,sn.exe -k a.snk,然后将密钥文件拷入项目中
在AssemblyInfo.vc中加入密钥 [assembly:AssemblyKeyFileAttribute["..//..//a.snk"]]
使用regsvcs.exe 将Dll注册到Com+ Services里面
使用上面的类
private void DelUser()
{
ES es=new Es();
try
{
es.db("prolove");
}
catch
{
}
}
开始事务,进入事务待命状态--〉记录要改改变的记录,对要改变的记录加锁--〉拷贝加锁的记录--〉
事务更新--〉释放记录锁,抛弃事务日志和备份的记录
事务处理方法:
1)利用数据库处理(例如在存储过程里面)
好处:速度快
例如:
Create Pro SqlTran As
begin tran
declare @errorinfo int
//sql语句
select @errorinfo=@@error
if(@errorinfo=0)
commit tran
else
rollback tran
go
2)在代码里面加入事务处理
好处:独立于数据库
private void Tran(string strconn)
{
SqlConnection conn=new SqlConnection(strconn);
conn.Open();
//启动事务
SqlTransaction tran=conn.BeginTransaction();
//为事务创建命令
SqlCommand cmd=new SqlCommand();
cmd.Connection=conn;
cmd.Transaction=tran;
try
{
cmd.CommandText=//sql语句
cmd.ExecuteNonQuery();
tran.Commit();
}
catch()
{
tran.Rollback();
}
finally
{
conn.Close();
}
}
3)利用COM+来进行事务处理
好处:实现对不同数据库的操作
//建一个类库
//using Syatem.EnterpriseService
//Required:假如事务存在则共享事务,否则创建新事务
[Transaction(TransactionOption.Required,timeout=1200)]
public class ES:ServiceComponet
{
public void db(string username)
{
try
{
strsql="delete from user where username='"+username+"'";
SqlConnection conn=new SqlConnection(strconn);
conn.Open();
SqlCommand cmd=new SqlCommand(strsql);
cmd.ExecuteNonQuery();
ContextUtil.SetComplete();
conn.Close();
}
catch
{
ContextUtil.SetAbort();
}
}
}
对类ES必须要有一个强名称进行签名,sn.exe -k a.snk,然后将密钥文件拷入项目中
在AssemblyInfo.vc中加入密钥 [assembly:AssemblyKeyFileAttribute["..//..//a.snk"]]
使用regsvcs.exe 将Dll注册到Com+ Services里面
使用上面的类
private void DelUser()
{
ES es=new Es();
try
{
es.db("prolove");
}
catch
{
}
}