private OracleDbType GetOracleType(ODAdbType OdaType) { switch (OdaType) { case ODAdbType.ODatetime: return(OracleDbType.Date); case ODAdbType.ODecimal: return(OracleDbType.Decimal); case ODAdbType.OBinary: return(OracleDbType.Blob); case ODAdbType.OInt: return(OracleDbType.Int32); case ODAdbType.OChar: return(OracleDbType.Char); case ODAdbType.OVarchar: return(OracleDbType.Varchar2); case ODAdbType.OArrary: return(OracleDbType.Raw); default: return(OracleDbType.Varchar2); } }
private void ODAColumnsInit(ODACmd Cmd, string ColumnName, ODAdbType DBDataType, int Size, string ColumnComment, bool IsRequired, ParameterDirection Direction) { if (Cmd == null) { throw new ODAException(20003, string.IsNullOrEmpty(_ColumnComment) ? _ColumnName : _ColumnComment + "Cmd can't be null"); } _Cmd = Cmd; if (!String.IsNullOrEmpty(ColumnName)) { _ColumnName = ColumnName; } _DBDataType = DBDataType; _Size = Size; _ColumnComment = ColumnComment; _PDirection = Direction; _IsRequired = IsRequired; }
/// <summary> /// 快速创建ODA变量 /// </summary> /// <param name="ParamName"></param> /// <param name="ParamVal"></param> /// <param name="ColumnName"></param> /// <returns></returns> public static ODAParameter CreateParam(string ParamName, object ParamVal, string ColumnName = null) { ODAdbType Dt = ODAdbType.OVarchar; string cn = ColumnName; if (ParamVal is int || ParamVal is int? || ParamVal is long || ParamVal is long? || ParamVal is decimal || ParamVal is decimal?|| ParamVal is double || ParamVal is double? || ParamVal is float || ParamVal is float? || ParamVal is short || ParamVal is short? || ParamVal is uint || ParamVal is uint? || ParamVal is ushort || ParamVal is ushort? || ParamVal is ulong || ParamVal is ulong? ) { Dt = ODAdbType.ODecimal; } else if (ParamVal is DateTime || ParamVal is DateTime?|| ParamVal is TimeSpan || ParamVal is TimeSpan?) { Dt = ODAdbType.ODatetime; } else if (ParamVal is byte[]) { Dt = ODAdbType.OBinary; } if (ColumnName == null) { cn = ParamName.TrimStart(ODAParameter.ODAParamsMark); } return(new ODAParameter() { ColumnName = ColumnName, DBDataType = Dt, Direction = ParameterDirection.Input, ParamsName = ParamName, ParamsValue = ParamVal, Size = 2000 }); }
public ODAColumns CreateColumn(string ColName, ODAdbType ColType = ODAdbType.OVarchar, int size = 2000) { return(new ODAColumns(this, ColName, ColType, size)); }
void bgw_DoWork(object sender, DoWorkEventArgs e) { string[] rtlMsg = new string[2]; try { StringBuilder sbrlt = new StringBuilder(); TransferParams prm = e.Argument as TransferParams; BackgroundWorker bgw = sender as BackgroundWorker; StringBuilder tblScript = new StringBuilder(); string TargetDB = prm.TargetDB.DBAType.ToString(); var TblPkeys = prm.SourceDB.GetPrimarykey(); for (int i = 0; i < prm.TranTable.Count; i++) { ReportStatus RS = new ReportStatus() { Percent = i * 100 / prm.TranTable.Count, TransObject = prm.TranTable[i], TransType = "Table" }; bgw.ReportProgress(RS.Percent, RS); DataRow[] drs = prm.SrcTables.Select("TABLE_NAME ='" + prm.TranTable[i] + "'"); if (drs == null || drs.Length == 0) { continue; } DBColumnInfo[] ColumnInfo = new DBColumnInfo[drs.Length]; bool isBigData = false; try { for (int j = 0; j < drs.Length; j++) { int Scale = 0; int.TryParse(drs[j]["SCALE"].ToString().Trim(), out Scale); int length = 2000; int.TryParse(drs[j]["LENGTH"].ToString().Trim(), out length); string ColumnName = drs[j]["COLUMN_NAME"].ToString().Trim(); DBColumnInfo DBColInfo = new DBColumnInfo() { ColumnName = ColumnName, ColumnType = drs[j]["DATATYPE"].ToString().Trim(), Length = length, Scale = Scale, NotNull = drs[j]["NOT_NULL"].ToString().Trim().ToUpper() == "Y", }; CurrentDatabase.GetTargetsType(prm.SourceDB.DBAType.ToString(), TargetDB, ref DBColInfo); ColumnInfo[j] = DBColInfo; isBigData = isBigData || DBColInfo.IsBigData; } } catch (Exception ex) { sbrlt.AppendLine(string.Format("表【{0}】字段异常,异常信息:{1} ", prm.TranTable[i], ex.Message)); } string sql = ""; try { string[] Pkeys = null; if (TblPkeys != null && TblPkeys.ContainsKey(prm.TranTable[i])) { Pkeys = TblPkeys[prm.TranTable[i]]; } sql = this.CreateTable(prm.TargetDB, prm.TranTable[i], ColumnInfo, Pkeys); tblScript.AppendLine(sql); } catch (Exception ex) { sbrlt.AppendLine(string.Format("读取表【{0}】主键并生成建表脚本时生异常,异常信信:{1} ", prm.TranTable[i], ex.Message)); } try { if (prm.NeedTransTable) { try { string dropSQL = "DROP TABLE " + prm.TranTable[i]; prm.TargetDB.ExecuteSQL(dropSQL, null); } catch { } prm.TargetDB.ExecuteSQL(sql.ToString(), null); } ReportStatus RST = new ReportStatus() { Percent = (i + 1) * 100 / prm.TranTable.Count, TransObject = "Table [" + prm.TranTable[i] + "] Created", TransType = "Table" }; bgw.ReportProgress(RS.Percent, RST); } catch (Exception ex) { sbrlt.AppendLine(string.Format("创建表【{0}】时发生异常,建表脚本 {1} ,异常信信:{2} ", prm.TranTable[i], sql.ToString(), ex.Message)); } try { if (prm.NeedTransData) { var trgCol = prm.TargetDB.GetTableColumns().Select("TABLE_NAME ='" + prm.TranTable[i] + "'"); ODAParameter[] Oprms = new ODAParameter[trgCol.Length]; for (int j = 0; j < trgCol.Length; j++) { int collng = 2000; int.TryParse(trgCol[j]["LENGTH"].ToString().Trim(), out collng); DBColumnInfo ODAColInfo = new DBColumnInfo() { ColumnName = trgCol[j]["COLUMN_NAME"].ToString(), ColumnType = trgCol[j]["DATATYPE"].ToString().Trim(), Length = collng, IsBigData = isBigData, NoLength = false, Scale = 0, NotNull = false }; CurrentDatabase.GetTargetsType(prm.TargetDB.DBAType.ToString(), "ODA", ref ODAColInfo); ODAdbType OdaType = (ODAdbType)Enum.Parse(typeof(ODAdbType), ODAColInfo.ColumnType, true); Oprms[j] = new ODAParameter() { ColumnName = trgCol[j]["COLUMN_NAME"].ToString(), DBDataType = OdaType, Direction = ParameterDirection.Input, ParamsName = trgCol[j]["COLUMN_NAME"].ToString(), Size = collng }; } int total = 0; int maxR = isBigData ? 50 : 10000; int startIndx = 0; DataTable DT_total = CurrentDatabase.DataSource.Select("SELECT COUNT(*) FROM " + prm.TranTable[i], null); int.TryParse(DT_total.Rows[0][0].ToString(), out total); while (startIndx < total) { ReportStatus RSData0 = new ReportStatus() { Percent = total == 0 ? 0 : startIndx * 100 / total, TransObject = prm.TranTable[i] + " Preparing " + startIndx.ToString() + " ~ " + (startIndx + maxR).ToString() + "/" + total.ToString() + " record ", TransType = "Data" }; bgw.ReportProgress(RS.Percent, RSData0); DataTable Source = CurrentDatabase.DataSource.Select("SELECT * FROM " + prm.TranTable[i], null, startIndx, maxR, null); Source.TableName = prm.TranTable[i]; int endIdx = (startIndx + maxR) > total ? total : startIndx + maxR; ReportStatus RSData1 = new ReportStatus() { Percent = total == 0 ? 0 : endIdx * 100 / total, TransObject = prm.TranTable[i] + " Importing " + startIndx.ToString() + " ~ " + endIdx.ToString() + "/" + total.ToString() + " record ", TransType = "Data" }; bgw.ReportProgress(RS.Percent, RSData1); TarDB.Import(Source, Oprms); startIndx = startIndx + maxR; } } } catch (Exception ex) { sbrlt.AppendLine(string.Format("导入数据到表【{0}】时发生异常:{1} ", prm.TranTable[i], ex.Message)); } } if (sbrlt.Length == 0) { sbrlt.Append("数据复制完成!"); } rtlMsg[0] = sbrlt.ToString(); rtlMsg[1] = tblScript.ToString(); } catch (Exception ex) { rtlMsg[0] = ex.ToString(); } e.Result = rtlMsg; }
public ODAColumns(ODACmd Cmd, string ColumnName, ODAdbType DBDataType, int Size, string ColumnComment, bool IsRequired, ParameterDirection Direction) { this.ODAColumnsInit(Cmd, ColumnName, DBDataType, Size, ColumnComment, IsRequired, Direction); }
public ODAColumns(ODACmd Cmd, string ColumnName, ODAdbType DBDataType, int Size, bool IsRequired) { this.ODAColumnsInit(Cmd, ColumnName, DBDataType, Size, null, IsRequired, ParameterDirection.Input); }
public ODAColumns(ODACmd Cmd, string ColumnName, ODAdbType DBDataType, int Size) { this.ODAColumnsInit(Cmd, ColumnName, DBDataType, Size, null, false, ParameterDirection.Input); }
ODAColumns IODAColumns.SetParamDataType(ODAdbType ParamType) { _DBDataType = ParamType; return(this); }
void bgw_DoWork(object sender, DoWorkEventArgs e) { try { StringBuilder sbrlt = new StringBuilder(); TransferParams prm = e.Argument as TransferParams; BackgroundWorker bgw = sender as BackgroundWorker; for (int i = 0; i < prm.TranTable.Count; i++) { ReportStatus RS = new ReportStatus() { Percent = i * 100 / prm.TranTable.Count, TransObject = prm.TranTable[i], TransType = "Table" }; bgw.ReportProgress(RS.Percent, RS); DataRow[] drs = prm.SrcTables.Select("TABLE_NAME ='" + prm.TranTable[i] + "'"); if (drs == null || drs.Length == 0) { continue; } DatabaseColumnInfo[] ColumnInfo = new DatabaseColumnInfo[drs.Length]; ODAParameter[] Oprms = new ODAParameter[drs.Length]; bool isBigData = false; for (int j = 0; j < drs.Length; j++) { int Scale = 0; int.TryParse(drs[j]["SCALE"].ToString().Trim(), out Scale); int length = 2000; int.TryParse(drs[j]["LENGTH"].ToString().Trim(), out length); ColumnInfo[j] = prm.TargetDB.ODAColumnToOrigin(drs[j]["COLUMN_NAME"].ToString(), drs[j]["ODA_DATATYPE"].ToString().Trim(), length, Scale); ColumnInfo[j].NotNull = drs[j]["NOT_NULL"].ToString().Trim().ToUpper() == "Y"; ODAdbType DBDataType = ODAdbType.OVarchar; Enum.TryParse <ODAdbType>(drs[j]["ODA_DATATYPE"].ToString().Trim(), out DBDataType); if (DBDataType == ODAdbType.OBinary) { isBigData = true; } Oprms[j] = new ODAParameter() { ColumnName = drs[j]["COLUMN_NAME"].ToString(), DBDataType = DBDataType, Direction = ParameterDirection.Input, ParamsName = drs[j]["COLUMN_NAME"].ToString(), Size = ColumnInfo[j].Length }; } if (prm.NeedTransTable) { string[] Pkeys = prm.SourceDB.GetPrimarykey(prm.TranTable[i]); string tlt = this.CreateTable(prm.TargetDB, prm.TranTable[i], ColumnInfo, Pkeys); if (!string.IsNullOrWhiteSpace(tlt)) { sbrlt.AppendLine(tlt); continue; } ReportStatus RST = new ReportStatus() { Percent = (i + 1) * 100 / prm.TranTable.Count, TransObject = "Table [" + prm.TranTable[i] + "] Created", TransType = "Table" }; bgw.ReportProgress(RS.Percent, RST); } if (prm.NeedTransData) { for (int j = 0; j < drs.Length; j++) { Oprms[j] = new ODAParameter() { ColumnName = drs[j]["COLUMN_NAME"].ToString(), DBDataType = (ODAdbType)Enum.Parse(typeof(ODAdbType), drs[j]["ODA_DATATYPE"].ToString().Trim()), Direction = ParameterDirection.Input, ParamsName = drs[j]["COLUMN_NAME"].ToString(), Size = ColumnInfo[j].Length }; } int total = 0; int maxR = isBigData ? 50 : 10000; int startIndx = 0; DataTable DT_total = CurrentDatabase.DataSource.Select("SELECT COUNT(*) FROM " + prm.TranTable[i], null); int.TryParse(DT_total.Rows[0][0].ToString(), out total); while (startIndx < total) { ReportStatus RSData0 = new ReportStatus() { Percent = total == 0 ? 0 : startIndx * 100 / total, TransObject = prm.TranTable[i] + " Preparing " + startIndx.ToString() + " ~ " + (startIndx + maxR).ToString() + "/" + total.ToString() + " record ", TransType = "Data" }; bgw.ReportProgress(RS.Percent, RSData0); DataTable Source = CurrentDatabase.DataSource.Select("SELECT * FROM " + prm.TranTable[i], null, startIndx, maxR, null); Source.TableName = prm.TranTable[i]; int endIdx = (startIndx + maxR) > total ? total : startIndx + maxR; ReportStatus RSData1 = new ReportStatus() { Percent = total == 0 ? 0 : endIdx * 100 / total, TransObject = prm.TranTable[i] + " Importing " + startIndx.ToString() + " ~ " + endIdx.ToString() + "/" + total.ToString() + " record ", TransType = "Data" }; bgw.ReportProgress(RS.Percent, RSData1); TarDB.Import(Source, Oprms); startIndx = startIndx + maxR; } } } if (sbrlt.Length == 0) { sbrlt.Append("数据复制完成!"); } e.Result = sbrlt.ToString(); } catch (Exception ex) { e.Result = ex.ToString(); } }
void bgw_DoWork(object sender, DoWorkEventArgs e) { string[] rtlMsg = new string[2]; try { StringBuilder sbrlt = new StringBuilder(); TransferParams prm = e.Argument as TransferParams; BackgroundWorker bgw = sender as BackgroundWorker; StringBuilder tblScript = new StringBuilder(); string TargetDB = prm.TargetDB.DBAType.ToString(); for (int i = 0; i < prm.TranTable.Count; i++) { ReportStatus RS = new ReportStatus() { Percent = i * 100 / prm.TranTable.Count, TransObject = prm.TranTable[i], TransType = "Table" }; bgw.ReportProgress(RS.Percent, RS); DataRow[] drs = prm.SrcTables.Select("TABLE_NAME ='" + prm.TranTable[i] + "'"); if (drs == null || drs.Length == 0) { continue; } DatabaseColumnInfo[] ColumnInfo = new DatabaseColumnInfo[drs.Length]; ODAParameter[] Oprms = new ODAParameter[drs.Length]; bool isBigData = false; for (int j = 0; j < drs.Length; j++) { int Scale = 0; int.TryParse(drs[j]["SCALE"].ToString().Trim(), out Scale); int length = 2000; int.TryParse(drs[j]["LENGTH"].ToString().Trim(), out length); string TargetDBDataType = CurrentDatabase.GetTargetsType(drs[j]["DATATYPE"].ToString().Trim(), prm.TargetDB.DBAType.ToString(), TargetDB); string ODAType = CurrentDatabase.GetTargetsType(drs[j]["DATATYPE"].ToString().Trim(), CurrentDatabase.DataSource.DBAType.ToString(), "ODA"); ODAdbType DBDataType = ODAdbType.OVarchar; Enum.TryParse <ODAdbType>(ODAType, true, out DBDataType); ColumnInfo[j] = new DatabaseColumnInfo() { ColumnType = TargetDBDataType, Length = length <= 0 ? 2000 : length, Name = prm.TargetDB.ToDBColumnName(drs[j]["COLUMN_NAME"].ToString()), NotNull = drs[j]["NOT_NULL"].ToString().Trim().ToUpper() == "Y", Scale = Scale, NoLength = DBDataType == ODAdbType.OBinary || DBDataType == ODAdbType.OInt || DBDataType == ODAdbType.ODatetime }; if (DBDataType == ODAdbType.OBinary) { isBigData = true; } Oprms[j] = new ODAParameter() { ColumnName = drs[j]["COLUMN_NAME"].ToString(), DBDataType = DBDataType, Direction = ParameterDirection.Input, ParamsName = drs[j]["COLUMN_NAME"].ToString(), Size = ColumnInfo[j].Length }; } string[] Pkeys = prm.SourceDB.GetPrimarykey(prm.TranTable[i]); for (int k = 0; Pkeys != null && Pkeys.Length > k; k++) { Pkeys[k] = prm.TargetDB.ToDBColumnName(Pkeys[k]); } string sql = this.CreateTable(prm.TargetDB, prm.TranTable[i], ColumnInfo, Pkeys); tblScript.AppendLine(sql); if (prm.NeedTransTable) { if (prm.NeedTransTable) { try { string dropSQL = "DROP TABLE " + prm.TranTable[i]; prm.TargetDB.ExecuteSQL(dropSQL, null); } catch { } prm.TargetDB.ExecuteSQL(sql.ToString(), null); } ReportStatus RST = new ReportStatus() { Percent = (i + 1) * 100 / prm.TranTable.Count, TransObject = "Table [" + prm.TranTable[i] + "] Created", TransType = "Table" }; bgw.ReportProgress(RS.Percent, RST); } if (prm.NeedTransData) { int total = 0; int maxR = isBigData ? 50 : 10000; int startIndx = 0; DataTable DT_total = CurrentDatabase.DataSource.Select("SELECT COUNT(*) FROM " + prm.TranTable[i], null); int.TryParse(DT_total.Rows[0][0].ToString(), out total); while (startIndx < total) { ReportStatus RSData0 = new ReportStatus() { Percent = total == 0 ? 0 : startIndx * 100 / total, TransObject = prm.TranTable[i] + " Preparing " + startIndx.ToString() + " ~ " + (startIndx + maxR).ToString() + "/" + total.ToString() + " record ", TransType = "Data" }; bgw.ReportProgress(RS.Percent, RSData0); DataTable Source = CurrentDatabase.DataSource.Select("SELECT * FROM " + prm.TranTable[i], null, startIndx, maxR, null); Source.TableName = prm.TranTable[i]; int endIdx = (startIndx + maxR) > total ? total : startIndx + maxR; ReportStatus RSData1 = new ReportStatus() { Percent = total == 0 ? 0 : endIdx * 100 / total, TransObject = prm.TranTable[i] + " Importing " + startIndx.ToString() + " ~ " + endIdx.ToString() + "/" + total.ToString() + " record ", TransType = "Data" }; bgw.ReportProgress(RS.Percent, RSData1); TarDB.Import(Source, Oprms); startIndx = startIndx + maxR; } } } if (sbrlt.Length == 0) { sbrlt.Append("数据复制完成!"); } rtlMsg[0] = sbrlt.ToString(); rtlMsg[1] = tblScript.ToString(); } catch (Exception ex) { rtlMsg[0] = ex.ToString(); } e.Result = rtlMsg; }