ADO.NET 方式加事务
public DataTable GetUsers()
{
SqlTransaction trans = null;
SqlConnection con = new Sqlconnection("数据库连接语句");
try
{
con.Open();
trans = con.BeginTransaction();
SqlCommand com = new SqlCommand();
com.CommandText = @"数据库语句 条件=@变量";
SqlParameter para = new SqlParameter("变量","值");
com.Parameters.Add(para);
com.CommandText=com.CommandText;
com.Connection=con;
com.Transaction=trans;
com.ExecuteNonQuery();//执行方式自己选择
trans.Commit();//执行提交事务
}catch
{
trans.Rollback();//如果前面有异常则事务回滚
}
finally
{
con.Close();
}
}
2.企业库方式加事务
Database db = CreateDatabase();
SqlConnection con = new Sqlconnection("数据库连接语句");
SqlTransaction trans = connection.BeginTransaction();
result = db.ExecuteNonQuery(command, trans)
企业库封装方法
public virtual int ExecuteNonQuery(DbCommand command, DbTransaction transaction);
问题:
1.企业库的方式是不是我们只需传入事务对象 事务的提交和回滚它会帮我们自动完成 是否是将其封装到ExecuteNonQuery(command, trans)这个方法内部了 如果不是这样 那么为什么要传入一个事务对象 以及是否在返回结果后自动帮我们关闭连接释放资源
2.如果企业库没有帮我们自动完成事务的提交与回滚,那么我们要加事务的话还得想ADO.NET的方式在ExecuteNonQuery(command, trans)这个方法调用后 再添加提交事务和回滚事务的代码 该怎么写
回答你这个问题最直接的方式就是找源代码来看:
https://github.com/MicrosoftArchive/data-access-application-block/blob/master/source/Src/Data/Database.cs
ExecuteNonQuery调用了PrepareCommand,里面有command.Transaction = transaction;
而ADO.NET在调用ExecuteNonQuery的时候遇到错误,会自动回滚。