vb.net事物处理的简单介绍( 三 )


Required如果事务存在则共享事务,并且如有必要则创建新事务 。
RequiresNew使用新事务创建组件,而与当前上下文的状态无关 。
Supported如果事务存在 , 则共享该事务 。
一般来说COM+中的组件需要Required 或Supported 。当组件用于记录或查帐时RequiresNew 很有用,因为组件应该与活动中其他事务处理的提交或回滚隔离开来 。
派生类可以重载基类的任意属性 。如DataAccess选用Required,派生类仍然可以重载并指定RequiresNew或其他值 。
COM+事务有手动处理和自动处理,自动处理就是在所需要自动处理的方法前加上[AutoComplete],根据方法的正常或抛出异常决定提交或回滚 。
手动处理就是调用ContextUtil类中EnableCommit,SetComplete,SetAbort方法 。
public stringtestTransaction()
{
try
{
ContextUtil.EnableCommit();
InsertARecord1();
InsertARecord2();
ContextUtil.SetComplete();
return "succeed!";
}
catch(Exception ex)
{
ContextUtil.SetAbort();
return "failed!";
}
}
public void InsertARecord1()
{
string strconn="workstation id=WEIXIAOPING;packet size=4096;user id=sa;initial catalog=Northwind;persist security info=False";
SqlConnection conn=new SqlConnection(strconn);
conn.Open();
SqlCommand command=new SqlCommand("insert into tbTree(Context,ParentID) values('北京',1)",conn);
command.ExecuteNonQuery();
conn.Close();
}
public void InsertARecord2()
{
string strconn="workstation id=WEIXIAOPING;packet size=4096;user id=sa;initial catalog=Northwind;persist security info=False";
SqlConnection conn=new SqlConnection(strconn);
conn.Open();
SqlCommand command=new SqlCommand("insert into tbTree(Context,ParentID) values('上海',1)",conn);
command.ExecuteNonQuery();
conn.Close();
}
在需要事务跨 MSMQ 和其他可识别事务的资源(例如,SQL Server 数据库)运行的系统中,只能使用 DTC 或 COM+ 事务 , 除此之外没有其他选择 。DTC 协调参与分布式事务的所有资源管理器,也管理与事务相关的操作 。
这种做法的缺点是,由于存在 DTC 和 COM 互操作性开销 , 导致性能降低 。
COM+事务处理的类必须强命名 。
求问在.NET中如何使用Oracle数据库事务 (5)您可以使用 OracleTransaction 类的 Save() 方法在事务中设置保存点 。如果您有一个非常长的事务并且希望能够仅回滚到某个特定的时间点vb.net事物处理,那么您可能要使用保存点 。例如,您可能想对 10 个产品做一些更改,然后设置一个保存点,然后再对另 10 个产品做更改vb.net事物处理;如果您在进行第二批更改时出现vb.net事物处理了错误 , 那么您可以回滚至保存点,使您的第一批更改原封不动 。vb.net事物处理我将带您逐步完成演示如何使用保存点的 C# (TransExample2.cs) 示例程序和 VB.NET (TransExample2.vb) 示例程序中的相关新步骤 。这些程序向表 products 中添加一行,设置一个保存点 , 向表 products 中添加另一行,回滚至保存点,然后从表 products 中读取这些行 。在回滚至保存点后,只有添加到表 products 中的第一行保留了下来:第二行将已被删除 。第1 到第 3 步与“在 C# 和 VB.NET 中使用数据库事务”部分中所示的步骤相同,因此在这里将其省略 。第4 步 向表products 中添加一行 , 该行的产品 ID 为 6 。在C# 中: myOracleCommand.CommandText = "INSERT INTO products (" + " product_id, product_type_id, name, description, price" + ") VALUES (" + " 6, 2, 'Man from Another World', ' Man from Venus lands on Earth', 24.99" + ")"; myOracleCommand.ExecuteNonQuery();在VB.NET 中: myOracleCommand.CommandText = _ "INSERT INTO products ("_ " product_id, product_type_id, name, description, price"_ ") VALUES ("_ " 6, 2, 'Man from Another World', 'Man from Venus lands on Earth', 24.99"_ ")" myOracleCommand.ExecuteNonQuery()第5 步 使用OracleTransaction 的 Save() 方法设置一个名为 SaveProduct 的保存点 。在C# 中: myOracleTransaction.Save("SaveProduct");在VB.NET 中: myOracleTransaction.Save("SaveProduct")第6 步 向表products 中添加另一行,该行的产品 ID 为 7 。在C# 中: myOracleCommand.CommandText = "INSERT INTO products (" + " product_id, product_type_id, name, description, price" + ") VALUES (" + " 7, 2, 'Z-Files', 'Mysterious stories', 14.99" + ")"; myOracleCommand.ExecuteNonQuery();在VB.NET 中: myOracleCommand.CommandText = _ "INSERT INTO products ("_ " product_id, product_type_id, name, description, price"_ ") VALUES ("_ " 7, 2, 'Z-Files', 'Mysterious stories', 14.99"_ ")" myOracleCommand.ExecuteNonQuery()第7 步 回滚到先前在第 5 步中设置的 SaveProduct 保存点 。在C# 中: myOracleTransaction.Rollback("SaveProduct");在VB.NET 中: myOracleTransaction.Rollback("SaveProduct")完成回滚后 , 在第 6 步中添加的第二行已被删除,而在第 4 步中添加的第一行保留了下来 。TransExample2.cs 和 TransExample2.vb 中剩下的步骤显示表 products 的内容,回滚整个事务并从数据库断开 。用于Microsoft Transaction Server 的 Oracle 事务服务的快速说明 。Microsoft Transaction Server 是一个运行在互联网或网络服务器上的专有事务处理系统 。Microsoft Transaction Server 为客户端计算机部署和管理应用程序和数据库事务请求 。Microsoft Transaction Server 是以服务器为中心的三层体系结构模型的一个组件 。这种方法实现了将应用程序的表示、业务逻辑和数据元素清晰地分布到在一个网络中连接的不同计算机上 。无需专门集成,您就可以在与 Oracle 数据库服务器 8.0.6 版或更高版本连接的 Microsoft Transaction Server 中部署一个组件,但首先您必须安装 Oracle Services for Microsoft Transaction Server 。结论在本文中,您系统学习了在 .NET 程序中使用数据库事务 。(T004)

推荐阅读