private bool RunActionAsSql(DbDiffAction action)
        {
            string sql = action.GenerateSql(m_dstDb);

            if (SqlConfirmForm.Run(sql))
            {
                m_dstDb.Connection.Invoke(() =>
                {
                    var con  = m_dstDb.Connection.SystemConnection;
                    var tran = con.BeginTransaction();
                    var sqlo = new ConnectionSqlOutputStream(con, tran, m_dstDb.Dialect);
                    try
                    {
                        con.ExecuteNonQueries(sql, m_dstDb.Connection.Dialect, tran, null);
                    }
                    catch
                    {
                        tran.Rollback();
                        throw;
                    }
                    tran.Commit();
                });
                //var dmp = m_dstDb.Dialect.CreateDumper(sqlo, new SqlFormatProperties());
                //dmp.TargetDb = m_dstDb;
                //m_dstDb.Connection.Invoke(() => action.GenerateScript(dmp));
                return(true);
            }
            return(false);
        }
        public override bool Save()
        {
            var dialect = m_conn.Dialect ?? GenericDialect.Instance;
            var plan    = new AlterPlan();
            var opts    = new DbDiffOptions();
            var log     = new CachingLogger(LogLevel.Info);

            opts.AlterLogger = log;
            DbDiffTool.AlterDatabase(plan, new DbObjectPairing(m_origDb, m_db), opts);
            string alterSql = dialect.GenerateScript(dmp => plan.CreateRunner().Run(dmp, opts));

            if (!SqlConfirmForm.Run(alterSql, dialect, log))
            {
                return(false);
            }
            m_conn.AlterDatabase(plan, opts);
            objectGridView1.Modified = false;
            UpdateState();
            LoadStructure();
            return(true);
        }