/// <summary> /// SQL 연결 후 델리게이트에 필요한 정보를 주고 조작할 수 있게 한다. Transaction 관리를 한다. /// 에러가 발생하거나 델리게이트가 false를 리턴하면 rollback, 델리게이트가 true를 리턴하면 commit한다. /// </summary> /// <param name="func"></param> public void RunSqlSessionWithTransaction(Func <ISqlCommandBridge, bool> func) { using (var connection = new MySqlConnection(m_connectionString)) { connection.Open(); var transaction = connection.BeginTransaction(); var bridge = new SqlCommandBridge(connection, transaction); try { var doCommit = func(bridge); // 델리게이트를 실행하고 commit 여부를 리턴값으로 받는다. if (doCommit) { transaction.Commit(); } else { transaction.Rollback(); } } catch (Exception e) { transaction.Rollback(); // Exception이 발생하면 트랜잭션은 rollback한다 throw e; // Exception을 다시 외부로 토스 } } }
/// <summary> /// SQL 연결 후 델리게이트에 필요한 정보를 주고 조작할 수 있게 실행한다. 실행 후에는 SQL 연결을 자동으로 정리한다. /// </summary> /// <param name="del"></param> public void RunSqlSession(Action <ISqlCommandBridge> func) { using (var connection = new MySqlConnection(m_connectionString)) { connection.Open(); var bridge = new SqlCommandBridge(connection); func(bridge); } }