Exemplo n.º 1
0
        private void copyRelatedRecords(Cinar.Database.Database dbSrc, Table tblSrc, int idSrc, Cinar.Database.Database dbDst, Table tblDst, int idDst)
        {
            foreach (Table tbl in tblSrc.ReferencedByTables)
            {
                Column fld = tbl.FindColumnWhichRefersTo(tblSrc);
                string sql = string.Format("select * from [{0}] where [{1}] = {{0}}", tbl.Name, fld.Name);
                DataTable dt = dbSrc.GetDataTable(sql, idSrc);

                if (dt == null || dt.Rows.Count == 0 || dbDst.Tables[tbl.Name] == null)
                    continue;

                foreach (DataRow dr in dt.Rows)
                {
                    Hashtable ht = dbSrc.DataRowToHashtable(dr);
                    ht.Remove(tbl.PrimaryColumn.Name);
                    ht[tbl.PrimaryColumn.Name] = 0;
                    ht.Remove(fld.Name);
                    ht[fld.Name] = idDst;
                    dbDst.Insert(tbl.Name, ht);
                }

                backgroundWorker.ReportProgress(100, Environment.NewLine + string.Format("{0} records copied from {1}.", dt.Rows.Count, tbl.Name));
            }
        }
Exemplo n.º 2
0
        private void copyRecords(Cinar.Database.Database dbSrc, Table tblSrc, Column fldSrc, int parentIdSrc, Cinar.Database.Database dbDst, Table tblDst, Column fldDst, int parentIdDst)
        {
            string sql = string.Format("select * from [{0}] where [{1}] = {{0}}", tblSrc.Name, fldSrc.Name);
            DataTable dt = dbSrc.GetDataTable(sql, parentIdSrc);

            if (dt == null || dt.Rows.Count == 0)
                return;

            foreach (DataRow dr in dt.Rows)
            {
                Hashtable ht = dbSrc.DataRowToHashtable(dr);
                ht.Remove(tblSrc.PrimaryColumn.Name);
                ht[tblDst.PrimaryColumn.Name] = 0;
                ht.Remove(fldSrc.Name);
                ht[fldDst.Name] = parentIdDst;
                dbDst.Insert(tblDst.Name, ht);

                backgroundWorker.ReportProgress(0, ".");

                int newId = dbDst.GetInt("select max(" + tblDst.PrimaryColumn.Name + ") from [" + tblDst.Name + "]");

                copyRecords(dbSrc, tblSrc, fldSrc, (int)dr[tblSrc.PrimaryColumn.Name], dbDst, tblDst, fldDst, newId);
                copyRelatedRecords(dbSrc, tblSrc, (int)dr[tblSrc.PrimaryColumn.Name], dbDst, tblDst, newId);
            }
        }
Exemplo n.º 3
0
        private static void dumpTable(TextWriter tw, Cinar.Database.Table tbl, DatabaseProvider dbProvider)
        {
            if (tbl == null)
                throw new Exception("No such table.");

            string delimitL = "[", delimitR = "]";
            switch (dbProvider)
            {
                case DatabaseProvider.PostgreSQL:
                    delimitL = "\""; delimitR = "\"";
                    break;
                case DatabaseProvider.MySQL:
                    delimitL = "`"; delimitR = "`";
                    break;
                case DatabaseProvider.SQLServer:
                    delimitL = "["; delimitR = "]";
                    break;
                default:
                    break;
            }

            string fields = delimitL + String.Join(delimitR + ", " + delimitL, tbl.Columns.ToStringArray()) + delimitR;
            string sql = String.Format("insert into {2}{0}{3} ({1}) values ({{0}});", tbl.Name, fields, delimitL, delimitR);

            DataTable dt = Provider.Database.GetDataTable("select * from [" + tbl.Name + "]");
            foreach (DataRow dr in dt.Rows)
            {
                string[] values = new string[tbl.Columns.Count];
                for (int i = 0; i < tbl.Columns.Count; i++)
                {
                    string fieldName = tbl.Columns[i].Name;
                    if (dt.Columns[i].DataType == typeof(bool))
                        values[i] = dr.IsNull(fieldName) ? "null" : "'" + (dr[tbl.Columns[i].Name].Equals(true) ? 1 : 0) + "'";
                    else if (dt.Columns[i].DataType == typeof(DateTime))
                        values[i] = dr.IsNull(fieldName) ? "null" : "'" + ((DateTime)dr[tbl.Columns[i].Name]).ToString("yyyy-MM-dd HH:mm") + "'";
                    else
                        values[i] = dr.IsNull(fieldName) ? "null" : "'" + dr[tbl.Columns[i].Name].ToString().Replace("'", "''").Replace("\\", "\\\\").Replace("\n", "\\n").Replace("\r", "\\r") + "'";
                }
                tw.Write(sql, String.Join(", ", values));
                tw.WriteLine();
            }
        }
Exemplo n.º 4
0
 public void Initialize(Cinar.UICommands.CommandManager cmdMan)
 {
 }
Exemplo n.º 5
0
        public static ControlType GetDefaultControlType(Cinar.Database.DbType dbType, PropertyInfo pi, ColumnDetailAttribute columnProps)
        {
            ControlType ct = ControlType.Undefined;
            Type type = pi.PropertyType;

            switch (dbType)
            {
                case Cinar.Database.DbType.Boolean:
                    ct = ControlType.ComboBox;
                    break;
                case Cinar.Database.DbType.Byte:
                case Cinar.Database.DbType.Int16:
                case Cinar.Database.DbType.Int32:
                case Cinar.Database.DbType.Int64:
                    ct = ControlType.IntegerEdit;
                    if (columnProps.References != null)
                        ct = ControlType.LookUp;
                    break;
                case Cinar.Database.DbType.Real:
                case Cinar.Database.DbType.Float:
                case Cinar.Database.DbType.Decimal:
                case Cinar.Database.DbType.Double:
                case Cinar.Database.DbType.Numeric:
                case Cinar.Database.DbType.Currency:
                case Cinar.Database.DbType.CurrencySmall:
                    ct = ControlType.DecimalEdit;
                    break;
                case Cinar.Database.DbType.DateTimeSmall:
                case Cinar.Database.DbType.DateTime:
                case Cinar.Database.DbType.Date:
                    ct = ControlType.DateTimeEdit;
                    break;
                case Cinar.Database.DbType.Char:
                case Cinar.Database.DbType.VarChar:
                case Cinar.Database.DbType.NChar:
                case Cinar.Database.DbType.NVarChar:
                case Cinar.Database.DbType.Text:
                case Cinar.Database.DbType.NText:
                case Cinar.Database.DbType.TextTiny:
                case Cinar.Database.DbType.TextMedium:
                case Cinar.Database.DbType.TextLong:
                    if (type.IsEnum)
                        ct = ControlType.ComboBox;
                    else
                        ct = ControlType.StringEdit;
                    break;
                case Cinar.Database.DbType.Time:
                case Cinar.Database.DbType.Timetz:
                case Cinar.Database.DbType.Timestamp:
                case Cinar.Database.DbType.Timestamptz:
                case Cinar.Database.DbType.Binary:
                case Cinar.Database.DbType.VarBinary:
                case Cinar.Database.DbType.Image:
                case Cinar.Database.DbType.Blob:
                case Cinar.Database.DbType.BlobTiny:
                case Cinar.Database.DbType.BlobMedium:
                case Cinar.Database.DbType.BlobLong:
                case Cinar.Database.DbType.Variant:
                case Cinar.Database.DbType.Guid:
                case Cinar.Database.DbType.Xml:
                case Cinar.Database.DbType.Set:
                case Cinar.Database.DbType.Enum:
                case Cinar.Database.DbType.Undefined:
                default:
                    switch (type.Name)
                    {
                        case "String":
                            if (type.IsEnum)
                                ct = ControlType.ComboBox;
                            else
                                ct = ControlType.StringEdit;
                            break;
                        case "Int16":
                        case "Int32":
                        case "Int64":
                            if (type.IsEnum)
                                ct = ControlType.ComboBox;
                            else if (columnProps.References != null)
                                ct = ControlType.LookUp;
                            else
                                ct = ControlType.IntegerEdit;
                            break;
                        case "Decimal":
                        case "Double":
                        case "Single":
                            ct = ControlType.DecimalEdit;
                            break;
                        case "DateTime":
                            ct = ControlType.DateTimeEdit;
                            break;
                        case "Boolean":
                            ct = ControlType.ComboBox;
                            break;
                        default:
                            if (type.IsEnum)
                                ct = ControlType.ComboBox;
                            else
                                throw new Exception(Provider.GetResource("A control type cannot be acquired from the field type!"));
                            break;
                    }
                    break;
            }

            return ct;
        }