我的数据库viz.PurchaseOrderMST和SiteTRS中有两个表。 PurchaseOrderMST的主键是SiteTRS中的外键。案例是首先将数据插入PurchaseOrderMST,然后使用两个单独的SP插入SiteTRS。我希望在从asp.net(C#)插入这两个表时保持事务。如果成功插入第一个表中的数据,那么只应插入第二个表中的数据。如果第二个表中的插入失败,则第一个表中的插入也应该回滚。 我怎么能用asp.net的事务机制呢?
答案 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} })取决于您的存储过程是否实际返回任何数据。