public List<string> generateDataScriptsForDB2(DbSyncTableDiff tab)
        {
            List<string> output = new List<string>();
            if (!tab.isDifferent())
            {
                int havePrimaryKey = 0;
                bool simplePK = false;
                Key kk = null;
                foreach (DbSyncKeyDiff k in tab.KeysDifList())
                {
                    if (k.getKeyA().PrimaryKey)
                    {
                        havePrimaryKey++;
                        if (k.getKeyA().NameOfColumns.Count == 1)
                        {
                            simplePK = true;
                            kk = k.getKeyA();
                        }
                    }
                }

                    if ((havePrimaryKey == 1) && simplePK)
                    {
                        if (this.settings.ComparisonMethod == ComparatorSettings.LeftRight)
                        {
                            DbDataReader red1 = db1.prip.getReaderOfTable(tab.getTableName(),"","");
                            while (red1.Read())
                            {
                                bool differentExist = false;
                                bool differentNotExist = false;
                                List<ColVal> cvlist = new List<ColVal>();
                                string key = red1[kk.NameOfColumns[0]].ToString();
                                DbDataReader red2 = db2.prip.getReaderOfTable(tab.getTableName(), kk.NameOfColumns[0], key);
                                if (red2.Read())
                                {

                                    foreach (Columnn col in tab.getTabA().Stlpce)
                                    {
                                        cvlist.Add(new ColVal(col.COULUMN_NAME1,red1[col.COULUMN_NAME1].ToString()));
                                        if (red1[col.COULUMN_NAME1].ToString() != red2[col.COULUMN_NAME1].ToString())
                                        {
                                            differentExist = true;

                                        }
                                    }
                                }

                                else differentNotExist = true;
                                red2.Close();
                                if (differentExist)
                                {
                                    output.Add(db2.prip.updateRow(tab.getTableName(), cvlist, new ColVal(kk.NameOfColumns[0], key)));
                                }
                                if (differentNotExist)
                                {
                                    foreach (Columnn col in tab.getTabA().Stlpce)
                                    {
                                         cvlist.Add(new ColVal(col.COULUMN_NAME1,red1[col.COULUMN_NAME1].ToString()));
                                    }
                                    output.Add(db2.prip.insertRow(tab.getTableName(), cvlist));
                                }

                            }
                            red1.Close();
                        }
                        if (this.settings.ComparisonMethod == ComparatorSettings.LeftRightDel)
                        {
                            DbDataReader red1 = db1.prip.getReaderOfTable(tab.getTableName(), "", "");
                            while (red1.Read())
                            {
                                bool differentExist = false;
                                bool differentNotExist = false;
                                List<ColVal> cvlist = new List<ColVal>();
                                string key = red1[kk.NameOfColumns[0]].ToString();
                                DbDataReader red2 = db2.prip.getReaderOfTable(tab.getTableName(), kk.NameOfColumns[0], key);
                                if (red2.Read())
                                {

                                    foreach (Columnn col in tab.getTabA().Stlpce)
                                    {
                                        cvlist.Add(new ColVal(col.COULUMN_NAME1, red1[col.COULUMN_NAME1].ToString()));
                                        if (red1[col.COULUMN_NAME1].ToString() != red2[col.COULUMN_NAME1].ToString())
                                        {
                                            differentExist = true;

                                        }
                                    }
                                }
                                else differentNotExist = true;
                                red2.Close();
                                if (differentExist)
                                {
                                    output.Add(db2.prip.updateRow(tab.getTableName(), cvlist, new ColVal(kk.NameOfColumns[0], key)));
                                }
                                if (differentNotExist)
                                {
                                    foreach (Columnn col in tab.getTabA().Stlpce)
                                    {
                                        cvlist.Add(new ColVal(col.COULUMN_NAME1, red1[col.COULUMN_NAME1].ToString()));
                                    }
                                    output.Add(db2.prip.insertRow(tab.getTableName(), cvlist));
                                }
                            }
                            red1.Close();
                            red1 = db2.prip.getReaderOfTable(tab.getTableName(), "", "");
                            while (red1.Read())
                            {
                                bool differentExist = false;
                                bool differentNotExist = false;
                                List<ColVal> cvlist = new List<ColVal>();
                                string key = red1[kk.NameOfColumns[0]].ToString();
                                DbDataReader red2 = db1.prip.getReaderOfTable(tab.getTableName(), kk.NameOfColumns[0], key);
                                if (red2.Read())
                                {

                                    foreach (Columnn col in tab.getTabA().Stlpce)
                                    {
                                        cvlist.Add(new ColVal(col.COULUMN_NAME1, red1[col.COULUMN_NAME1].ToString()));
                                        if (red1[col.COULUMN_NAME1].ToString() != red2[col.COULUMN_NAME1].ToString())
                                        {
                                            differentExist = true;

                                        }
                                    }
                                }
                                else differentNotExist = true;
                                red2.Close();
                                //if (differentExist)
                                //{
                                //    output.Add(db2.prip.updateRow(tab.getTableName(), cvlist, new ColVal(key, red1[key].ToString())));
                                //}
                                if (differentNotExist)
                                {
                                    output.Add(db2.prip.deleteRow(tab.getTableName(), new ColVal(kk.NameOfColumns[0], key)));
                                }
                            }
                            red1.Close();
                            //teraz vymazem tie, co tam nemaju byt

                        }

                        if (this.settings.ComparisonMethod == ComparatorSettings.TwoWay)
                        {
                            DbDataReader red1 = db2.prip.getReaderOfTable(tab.getTableName(), "", "");
                            while (red1.Read())
                            {
                                bool differentExist = false;
                                bool differentNotExist = false;
                                List<ColVal> cvlist1 = new List<ColVal>();
                                List<ColVal> cvlist2 = new List<ColVal>();
                                string key = red1[kk.NameOfColumns[0]].ToString();
                                DbDataReader red2 = db1.prip.getReaderOfTable(tab.getTableName(), kk.NameOfColumns[0], key);
                                if (red2.Read())
                                {

                                    foreach (Columnn col in tab.getTabA().Stlpce)
                                    {
                                        cvlist1.Add(new ColVal(col.COULUMN_NAME1, red1[col.COULUMN_NAME1].ToString()));
                                        cvlist2.Add(new ColVal(col.COULUMN_NAME1, red2[col.COULUMN_NAME1].ToString()));
                                        if (red1[col.COULUMN_NAME1].ToString() != red2[col.COULUMN_NAME1].ToString())
                                        {
                                            differentExist = true;

                                        }
                                    }
                                }
                                else differentNotExist = true;
                                red2.Close();
                                if (differentExist)
                                {
                                    if (this.settings.IsDbAPriority)
                                    {
                                        output.Add(db2.prip.updateRow(tab.getTableName(), cvlist2, new ColVal(kk.NameOfColumns[0], key)));
                                    }

                                }
                                if (differentNotExist)
                                {
                                    foreach (Columnn col in tab.getTabA().Stlpce)
                                    {
                                       // cvlist1.Add(new ColVal(col.COULUMN_NAME1, red1[col.COULUMN_NAME1].ToString()));
                                    }
                                   // output.Add(db1.prip.insertRow(tab.getTableName(), cvlist1));
                                }
                            }
                            red1.Close();
                            red1 = db1.prip.getReaderOfTable(tab.getTableName(), "", "");
                            while (red1.Read())
                            {
                                bool differentExist = false;
                                bool differentNotExist = false;
                                List<ColVal> cvlist = new List<ColVal>();
                                string key = red1[kk.NameOfColumns[0]].ToString();
                                DbDataReader red2 = db2.prip.getReaderOfTable(tab.getTableName(), kk.NameOfColumns[0], key);
                                if (red2.Read())
                                {

                                    foreach (Columnn col in tab.getTabA().Stlpce)
                                    {
                                        cvlist.Add(new ColVal(col.COULUMN_NAME1, red1[col.COULUMN_NAME1].ToString()));
                                        if (red1[col.COULUMN_NAME1].ToString() != red2[col.COULUMN_NAME1].ToString())
                                        {
                                            differentExist = true;

                                        }
                                    }
                                }
                                else differentNotExist = true;
                                red2.Close();
                                //if (differentExist)
                                //{
                                //    output.Add(db2.prip.updateRow(tab.getTableName(), cvlist, new ColVal(key, red1[key].ToString())));
                                //}
                                if (differentNotExist)
                                {
                                    foreach (Columnn col in tab.getTabA().Stlpce)
                                    {
                                        cvlist.Add(new ColVal(col.COULUMN_NAME1, red1[col.COULUMN_NAME1].ToString()));
                                    }
                                    output.Add(db2.prip.insertRow(tab.getTableName(), cvlist));
                                }
                            }
                            red1.Close();
                        }

                    }
                    else throw new Exception("Cannot synchronize data on this table, because there is no primary key or composite primary key");

            }
            else
                throw new Exception("Cannot synchronize data on non synchronized tables, synchronize schema first please");
            return output;
            //return null;
        }
        public List<string> syncTable(DbSyncTableDiff tabIn)
        {
            List<string> output = new List<string>();
            if (settings.ComparisonMethod == ComparatorSettings.LeftRight )
            {
                //missing objects
                foreach (DbSyncColumnDiff col in tabIn.ColumnsDifferent)
                {
                    output.AddRange(db1.prip.alterColumn(tabIn.getTabB(), col.getColumnA()));
                }

                foreach (Trigger trg in tabIn.TriggersMissingDb2)
                {
                    output.AddRange(db1.prip.addTrigger(tabIn.getTabB(), trg));
                }
                foreach (Privilege priv in tabIn.GrantsMissingDb2)
                {
                    output.Add(db1.prip.createPrivilege(priv));
                }
                foreach (Index ind in tabIn.IndexesMissingDb2)
                {
                    output.AddRange(db1.prip.addIndex(tabIn.getTabB(), ind));
                }
                foreach (Constraintt con in tabIn.ConstraintsMissingDb2)
                {
                    output.AddRange(db1.prip.addConstraint(tabIn.getTabB(), con));
                }
                foreach (Key keyy in tabIn.KeysMissingDb2)
                {
                    output.AddRange(db1.prip.addKey(tabIn.getTabB(), keyy));
                }
                //objects to rewrite
                foreach (DbSyncIndexDiff ind in tabIn.IndexesDifferent)
                {
                    output.AddRange(db1.prip.alterIndex(tabIn.getTabB(), ind.getIndexA()));
                }
                foreach (DbSyncPrivilegeDiff priv in tabIn.GrantsDifferent)
                {
                    output.AddRange(db1.prip.alterPrivilege(priv.getPrivB()));
                }
                foreach (DbSyncTriggerDiff trg in tabIn.TriggersDifferent)
                {
                    output.AddRange(db1.prip.alterTrigger(tabIn.getTabB(), trg.getTrigA()));
                }
                foreach (DbSyncKeyDiff key in tabIn.KeysDifferent)
                {
                    output.AddRange(db1.prip.alterKey(tabIn.getTabB(), key.getKeyA()));
                }
                foreach (DbSyncConstraintDiff con in tabIn.ConstraintsDifferent)
                {
                    output.AddRange(db1.prip.alterConstraint(tabIn.getTabB(), con.getConstA()));
                }

            }

            if (settings.ComparisonMethod == ComparatorSettings.LeftRightDel)
            {
                //missing objects

                foreach (DbSyncColumnDiff col in tabIn.ColumnsDifferent)
                {
                    output.AddRange(db1.prip.alterColumn(tabIn.getTabB(), col.getColumnA()));
                }
                foreach (Trigger trg in tabIn.TriggersMissingDb2)
                {
                    output.AddRange(db1.prip.addTrigger(tabIn.getTabB(), trg));
                }
                foreach (Privilege priv in tabIn.GrantsMissingDb2)
                {
                    output.Add(db1.prip.createPrivilege(priv));
                }
                foreach (Index ind in tabIn.IndexesMissingDb2)
                {
                    output.AddRange(db1.prip.addIndex(tabIn.getTabB(), ind));
                }
                foreach (Constraintt con in tabIn.ConstraintsMissingDb2)
                {
                    output.AddRange(db1.prip.addConstraint(tabIn.getTabB(), con));
                }
                foreach (Key keyy in tabIn.KeysMissingDb2)
                {
                    output.AddRange(db1.prip.addKey(tabIn.getTabB(), keyy));
                }
                //objects to delete
                foreach (Index ind in tabIn.IndexesMissingDb1)
                {
                    output.AddRange(db1.prip.removeIndex(tabIn.getTabB(), ind));
                }
                foreach (Trigger trg in tabIn.TriggersMissingDb1)
                {
                    output.AddRange(db1.prip.removeTrigger(tabIn.getTabB(), trg));
                }
                foreach (Key keyy in tabIn.KeysMissingDb1)
                {
                    output.AddRange(db1.prip.removeKey(tabIn.getTabB(), keyy));
                }
                foreach (Constraintt con in tabIn.ConstraintsMissingDb1)
                {
                    output.AddRange(db1.prip.removeConstraint(tabIn.getTabB(), con));
                }
                foreach (Privilege priv in tabIn.GrantsMissingDb1)
                {
                    output.AddRange(db1.prip.removePrivilege(priv));
                }
                foreach (Columnn col in tabIn.ColumnsMissingDb1)
                {
                    output.AddRange(db1.prip.removeColumn(tabIn.getTabB(), col));
                }
                //objects to rewrite
                foreach (DbSyncIndexDiff ind in tabIn.IndexesDifferent)
                {
                    output.AddRange(db1.prip.alterIndex(tabIn.getTabB(), ind.getIndexA()));
                }
                foreach (DbSyncPrivilegeDiff priv in tabIn.GrantsDifferent)
                {
                    output.AddRange(db1.prip.alterPrivilege(priv.getPrivA()));
                }
                foreach (DbSyncTriggerDiff trg in tabIn.TriggersDifferent)
                {
                    output.AddRange(db1.prip.alterTrigger(tabIn.getTabB(), trg.getTrigA()));
                }
                foreach (DbSyncKeyDiff key in tabIn.KeysDifferent)
                {
                    output.AddRange(db1.prip.alterKey(tabIn.getTabB(), key.getKeyA()));
                }
                foreach (DbSyncConstraintDiff con in tabIn.ConstraintsDifferent)
                {
                    output.AddRange(db1.prip.alterConstraint(tabIn.getTabB(), con.getConstA()));
                }

            }

            if (settings.ComparisonMethod == ComparatorSettings.RightLeft )
            {
                //missing objects
                foreach (DbSyncColumnDiff col in tabIn.ColumnsDifferent)
                {
                    output.AddRange(db1.prip.alterColumn(tabIn.getTabA(), col.getColumnB()));
                }
                foreach (Trigger trg in tabIn.TriggersMissingDb1)
                {
                    output.AddRange(db1.prip.addTrigger(tabIn.getTabA(), trg));
                }
                foreach (Privilege priv in tabIn.GrantsMissingDb1)
                {
                    output.Add(db1.prip.createPrivilege(priv));
                }
                foreach (Index ind in tabIn.IndexesMissingDb1)
                {
                    output.AddRange(db1.prip.addIndex(tabIn.getTabA(), ind));
                }
                foreach (Constraintt con in tabIn.ConstraintsMissingDb1)
                {
                    output.AddRange(db1.prip.addConstraint(tabIn.getTabA(), con));
                }
                foreach (Key keyy in tabIn.KeysMissingDb1)
                {
                    output.AddRange(db1.prip.addKey(tabIn.getTabA(), keyy));
                }
                //objects to rewrite
                foreach (DbSyncIndexDiff ind in tabIn.IndexesDifferent)
                {
                    output.AddRange(db1.prip.alterIndex(tabIn.getTabA(), ind.getIndexB()));
                }
                foreach (DbSyncPrivilegeDiff priv in tabIn.GrantsDifferent)
                {
                    output.AddRange(db1.prip.alterPrivilege(priv.getPrivA()));
                }
                foreach (DbSyncTriggerDiff trg in tabIn.TriggersDifferent)
                {
                    output.AddRange(db1.prip.alterTrigger(tabIn.getTabA(), trg.getTrigB()));
                }
                foreach (DbSyncKeyDiff key in tabIn.KeysDifferent)
                {
                    output.AddRange(db1.prip.alterKey(tabIn.getTabA(), key.getKeyB()));
                }
                foreach (DbSyncConstraintDiff con in tabIn.ConstraintsDifferent)
                {
                    output.AddRange(db1.prip.alterConstraint(tabIn.getTabA(), con.getConstB()));
                }

            }

            if (settings.ComparisonMethod == ComparatorSettings.RightLeftDel)
            {
                //missing objects
                foreach (DbSyncColumnDiff col in tabIn.ColumnsDifferent)
                {
                    output.AddRange(db1.prip.alterColumn(tabIn.getTabA(), col.getColumnB()));
                }
                foreach (Trigger trg in tabIn.TriggersMissingDb1)
                {
                    output.AddRange(db1.prip.addTrigger(tabIn.getTabA(), trg));
                }
                foreach (Privilege priv in tabIn.GrantsMissingDb1)
                {
                    output.Add(db1.prip.createPrivilege(priv));
                }
                foreach (Index ind in tabIn.IndexesMissingDb1)
                {
                    output.AddRange(db1.prip.addIndex(tabIn.getTabA(), ind));
                }
                foreach (Constraintt con in tabIn.ConstraintsMissingDb1)
                {
                    output.AddRange(db1.prip.addConstraint(tabIn.getTabA(), con));
                }
                foreach (Key keyy in tabIn.KeysMissingDb1)
                {
                    output.AddRange(db1.prip.addKey(tabIn.getTabA(), keyy));
                }
                //objects to delete
                foreach (Index ind in tabIn.IndexesMissingDb2)
                {
                    output.AddRange(db1.prip.removeIndex(tabIn.getTabA(), ind));
                }
                foreach (Trigger trg in tabIn.TriggersMissingDb2)
                {
                    output.AddRange(db1.prip.removeTrigger(tabIn.getTabA(), trg));
                }
                foreach (Key keyy in tabIn.KeysMissingDb2)
                {
                    output.AddRange(db1.prip.removeKey(tabIn.getTabA(), keyy));
                }
                foreach (Constraintt con in tabIn.ConstraintsMissingDb2)
                {
                    output.AddRange(db1.prip.removeConstraint(tabIn.getTabA(), con));
                }
                foreach (Privilege priv in tabIn.GrantsMissingDb2)
                {
                    output.AddRange(db1.prip.removePrivilege(priv));
                }
                foreach (Columnn col in tabIn.ColumnsMissingDb2)
                {
                    output.AddRange(db1.prip.removeColumn(tabIn.getTabA(), col));
                }
                //objects to rewrite
                foreach (DbSyncIndexDiff ind in tabIn.IndexesDifferent)
                {
                    output.AddRange(db1.prip.alterIndex(tabIn.getTabA(), ind.getIndexB()));
                }
                foreach (DbSyncPrivilegeDiff priv in tabIn.GrantsDifferent)
                {
                    output.AddRange(db1.prip.alterPrivilege(priv.getPrivB()));
                }
                foreach (DbSyncTriggerDiff trg in tabIn.TriggersDifferent)
                {
                    output.AddRange(db1.prip.alterTrigger(tabIn.getTabA(), trg.getTrigB()));
                }
                foreach (DbSyncKeyDiff key in tabIn.KeysDifferent)
                {
                    output.AddRange(db1.prip.alterKey(tabIn.getTabA(), key.getKeyB()));
                }
                foreach (DbSyncConstraintDiff con in tabIn.ConstraintsDifferent)
                {
                    output.AddRange(db1.prip.alterConstraint(tabIn.getTabA(), con.getConstB()));
                }

            }

            return output;
        }