【问题标题】: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())取决于你的存储过程是否真的返回是否有任何数据。

    【讨论】:

    • 我可能会把这个纹在我身上。非常有帮助。谢谢。
    猜你喜欢
    • 1970-01-01
    • 2011-10-29
    • 2014-08-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多