2

エラーが発生した場合は、ロールバックオプションを使用して一連の行を挿入しています。

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);
}

ループでエラーが発生した場合、すべての行がロールバックする必要があります。

4

2 に答える 2

1

はい、SqlTransactionを使用してエラー時にコミットおよびロールバックできます

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

于 2013-01-19T07:45:24.280 に答える
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();
    }
于 2013-01-19T07:46:21.917 に答える