从C#代码回滚插入错误

时间:2013-01-19 07:41:19

标签: c# visual-studio-2010 sql-server-2008

如果发生任何错误,我会插入一系列具有回滚选项的行。

BEGIN TRY
BEGIN TRANSACTION

    INSERT INTO myTable (myColumns ...) VALUES (myValues ...);
    INSERT INTO myTable (myColumns ...) VALUES (myValues ...);


COMMIT TRAN -- Transaction Success!
END TRY
BEGIN CATCH
IF @@TRANCOUNT > 0
    ROLLBACK TRAN --RollBack 

END CATCH

在C#中,我在for循环中插入行。是否有可能在这里获得相同的功能?

foreach(string lst in str[])
{
    //insert query
    dbl.ExecSqlNonQuery("sp_tbltest", CommandType.StoredProcedure);
}

如果循环中发生任何错误,则所有行都会回滚。

2 个答案:

答案 0 :(得分:1)

是, 您可以使用SqlTransaction提交和回滚错误

http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqltransaction.aspx

答案 1 :(得分:1)

try
    {            
        using (TransactionScope scope = new TransactionScope())
        {
            //// create the connection
            using (SqlConnection connection1 = new SqlConnection(connectString1))
            {
                //// open the connection
                connection1.Open();

                foreach(string lst in str[])
                {
                     //insert query
                     connection1.ExecSqlNonQuery("sp_tbltest", CommandType.StoredProcedure);
                }                    
            }

            scope.Complete();

        }

    }
    catch (Exception)
    {
        scope.Rollback();
    }