C# 코드로 트랜잭션처리 VS 쿼리에서 트랜잭션처리

C# 트랜잭션 처리 코드 예시

using System.Data.SqlClient;

// 데이터베이스 연결 문자열
string connectionString = "Data Source=myServerAddress;Initial Catalog=myDataBase;User ID=myUsername;Password=myPassword";

try
{
    // SqlConnection 객체 생성
    using (SqlConnection connection = new SqlConnection(connectionString))
    {
        // SqlCommand 객체 생성
        using (SqlCommand command = new SqlCommand())
        {
            // 데이터베이스 연결 설정
            command.Connection = connection;
            connection.Open();

            // 트랜잭션 시작
            SqlTransaction transaction = connection.BeginTransaction();

            // SqlCommand 객체에 트랜잭션 연결
            command.Transaction = transaction;

            try
            {
                // SQL 쿼리 실행
                command.CommandText = "INSERT INTO myTable (column1, column2) VALUES ('value1', 'value2')";
                command.ExecuteNonQuery();

                command.CommandText = "UPDATE myTable SET column1 = 'newValue' WHERE column2 = 'value2'";
                command.ExecuteNonQuery();

                // 트랜잭션 커밋
                transaction.Commit();
            }
            catch (Exception ex)
            {
                // 예외 발생 시 트랜잭션 롤백
                transaction.Rollback();
            }
        }
    }
}
catch (Exception ex)
{
    // 예외 처리
}

위 코드에서는 SqlConnection 객체를 생성하여 데이터베이스 연결을 설정하고 SqlCommand 객체를 생성하여 트랜잭션을 사용한 SQL 쿼리를 실행한다.

트랜잭션은 BeginTransaction() 메서드로 시작하고, Commit() 메서드로 커밋하거나 Rollback() 메서드로 롤백한다.

이때, using 구문을 사용하여 자원 해제를 보장할 수 있다.

쿼리 트랜잭션 처리 코드 예시

BEGIN TRY
   -- 트랜잭션 시작
   BEGIN TRANSACTION

   -- 데이터베이스 조작 쿼리 실행
   INSERT INTO dbo.MyTable (Column1, Column2) VALUES ('Value1', 'Value2')

   -- 트랜잭션 커밋
   COMMIT TRANSACTION
END TRY
BEGIN CATCH
   -- 예외 처리 코드
   PRINT 'Error Occured'
   -- 트랜잭션 롤백
   ROLLBACK TRANSACTION
END CATCH

위 코드에서는 데이터베이스 조작 쿼리를 TRY 블록 안에 작성하고, 예외가 발생할 경우 CATCH 블록 안에 예외 처리 코드와 함께 트랜잭션을 롤백한다.

의문점을 가지게 된 이유

(데이터베이스의 트랜잭션 레벨을 생각하지 않고 커밋과 롤백 부분만 생각을 했을경우)

만약에 C#코드로 트랜잭션처리를 했으면, 데이터베이스측의 쿼리문에서는 트랜잭션처리를 하지 않아도 되지 않을까?