public static Type ConvertSreTypeIntoDotNetType(this SreAttribute attribute, DatabaseTypes databaseType) { switch (databaseType) { default: switch (attribute.Type.ToUpper()) { case "INT": return(typeof(int)); case "BIGINT": return(typeof(long)); case "DECIMAL": return(typeof(double)); case "BIT": return(typeof(bool)); case "GENERATED": case "NOTREFERENCED": case "REFERENCED": case "CODESET": case "STRING": return(typeof(string)); case "DATETIME": return(typeof(DateTime)); default: return(typeof(string)); } } }
private void BindAttribute(SreAttribute attribute) { }
private void BindAttributeFirst(SreAttribute attribute) { txtr1c3.Text = attribute.Name; }
private StringBuilder WriteOutputToDatabaseOracle(List <Row> rows) { _Job.PerformanceCounter.Start(_Job.JobIdentifier, JobPerformanceTaskNames.OutputWriterOracle); ExtensionMethods.TraceInformation("Starting oracle bulk insert..."); IDal dal = new DataAccessLayer(DatabaseTypes.Oracle).Instance; IDbConnection connection = dal.CreateConnection(ConnectionStringKey.Value); connection.Open(); IDbCommand command = dal.CreateCommand(); command.GetType().GetProperty("ArrayBindCount").SetValue(command, rows.Count, null); command.Connection = connection; ExtensionMethods.TraceInformation("Communication objects initialized. Creating arrays..."); int counter = 0; //creating arrays & insert statement string insertStatementPart1 = string.Format("insert into {0} (", DatabaseMap.TargetTableName); string insertStatementPart2 = "values ("; foreach (ColumnMapInfo columnMapInfo in DatabaseMap) { if ((!string.IsNullOrEmpty(columnMapInfo.InputColumn)) && (columnMapInfo.InputColumn != ColumnMapInfo.DatabaseDefault)) { counter++; insertStatementPart1 += "\"" + columnMapInfo.OutputColumn + "\","; if (columnMapInfo.InputColumn == ColumnMapInfo.CustomDefined) { insertStatementPart2 += string.Format("\"Customer_Id_Seq\".nextval,", counter); continue; } else { insertStatementPart2 += string.Format(":{0},", counter); } SreAttribute attributeAvailable = _Job.DataSource.AcceptableAttributesSystem.Where(a => a.Name == columnMapInfo.InputColumn).SingleOrDefault(); if (attributeAvailable == null) { continue; } Type attributeType = attributeAvailable.ConvertSreTypeIntoDotNetType(DatabaseTypes.Oracle); string[] strList = rows.Select(row => GetAttributeValue(row.ColumnsSystem[columnMapInfo.InputColumn], true)).ToArray(); if (attributeType == typeof(int)) { List <int?> list = strList.Select(s => s.GetValueOrNull <int>()).ToList(); command.AddParameterWithValue(columnMapInfo.OutputColumn, list.ToArray(), true); } else if (attributeType == typeof(long)) { List <long?> list = strList.Select(s => s.GetValueOrNull <long>()).ToList(); command.AddParameterWithValue(columnMapInfo.OutputColumn, list.ToArray(), true); } else if (attributeType == typeof(double)) { List <double?> list = strList.Select(s => s.GetValueOrNull <double>()).ToList(); command.AddParameterWithValue(columnMapInfo.OutputColumn, list.ToArray(), true); } else if (attributeType == typeof(bool)) { List <bool?> list = strList.Select(s => s.GetValueOrNull <bool>()).ToList(); command.AddParameterWithValue(columnMapInfo.OutputColumn, list.ToArray(), true); } else if (attributeType == typeof(DateTime)) { List <DateTime?> list = strList.Select(s => s.GetValueOrNull <DateTime>()).ToList(); command.AddParameterWithValue(columnMapInfo.OutputColumn, list.ToArray(), true); } else { command.AddParameterWithValue(columnMapInfo.OutputColumn, strList, true); } } } if (insertStatementPart1.Length > 1) { insertStatementPart1 = insertStatementPart1.Substring(0, insertStatementPart1.Length - 1); } if (insertStatementPart2.Length > 1) { insertStatementPart2 = insertStatementPart2.Substring(0, insertStatementPart2.Length - 1); } command.CommandText = string.Format("{0}) {1})", insertStatementPart1, insertStatementPart2); ExtensionMethods.TraceInformation("Arrays created. Executing statement - '{0}'", command.CommandText); command.ExecuteNonQuery(); connection.Close(); connection.Dispose(); ExtensionMethods.TraceInformation("Oracle bulk insert finished."); Trace.Flush(); _Job.PerformanceCounter.Stop(_Job.JobIdentifier, JobPerformanceTaskNames.OutputWriterOracle); return(new StringBuilder()); }