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)); } }
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); } }
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(); } }
public void Initialize(Cinar.UICommands.CommandManager cmdMan) { }
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; }