【问题标题】:Maintain transaction from asp.net C# for database while inserting data in two tables在两个表中插入数据时,维护来自 asp.net C# 的数据库事务
【发布时间】:2011-09-12 18:00:21
【问题描述】:
我的数据库中有两个表,即.PurchaseOrderMST 和 SiteTRS。 PurchaseOrderMST 的主键是 SiteTRS 中的外键。案例是首先将数据插入 PurchaseOrderMST,然后使用两个单独的 SP 插入 SiteTRS。我想在从 asp.net(C#) 插入这两个表的过程中维护事务。如果第一个表中的数据插入成功,那么只有第二个表中的数据才应该插入。如果在第二个表中插入失败,则在第一个表中的插入也应该回滚。
我怎样才能使用asp.net的事务机制来做到这一点???
【问题讨论】:
标签:
asp.net
sql-server-2008
transactions
【解决方案1】:
这实际上与 ASP.NET 无关,但通常与事务在 .NET 框架中的工作方式有关。使用SqlClient,您就是这样做的:
using (var connection = new SqlConnection("your connectionstring"))
{
connection.Open();
using (var transaction = connection.BeginTransaction())
{
try
{
using (var command1 = new SqlCommand("SP1Name", connection, transaction))
{
command1.ExecuteNonQuery();
}
using (var command2 = new SqlCommand("SP2Name", connection, transaction))
{
command2.ExecuteNonQuery();
}
transaction.Commit();
}
catch
{
transaction.Rollback();
throw;
}
}
}
你当然需要在执行SqlCommand对象之前添加Parameters,而你使用的执行方法(ExecuteNonQuery()、ExecuteScalar()或ExecuteReader())取决于你的存储过程是否真的返回是否有任何数据。