Exemplo n.º 1
0
        /// <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을 다시 외부로 토스
                }
            }
        }
Exemplo n.º 2
0
        /// <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);
            }
        }