在两个表中插入数据时,从asp.net C#维护数据库的事务

时间:2011-09-12 09:47:20

标签: asp.net sql-server-2008 transactions

我的数据库viz.PurchaseOrderMST和SiteTRS中有两个表。 PurchaseOrderMST的主键是SiteTRS中的外键。案例是首先将数据插入PurchaseOrderMST,然后使用两个单独的SP插入SiteTRS。我希望在从asp.net(C#)插入这两个表时保持事务。如果成功插入第一个表中的数据,那么只应插入第二个表中的数据。如果第二个表中的插入失败,则第一个表中的插入也应该回滚。 我怎么能用asp.net的事务机制呢?

1 个答案:

答案 0 :(得分:2)

这与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;
        }
    }
}

您当然需要在Parameters对象执行之前添加SqlCommand,以及执行哪种方法(ExecuteNonQuery()ExecuteScalar()或{{1} })取决于您的存储过程是否实际返回任何数据。