private static void Main(string[] args) { if (args.Length != 2) { throw new Exception($"Expected 2 arguments. Received {args.Length}.\n\t1. Name of table to retrieve data from. \n\t2. Name of table to store data to."); } #if DEBUG var fromTableName = "dwbuild.TEMP_CashAuditToRdsDw"; var toTableName = "CashAudit"; #else var fromTableName = args[0]; var ToTableName = args[1]; #endif try { DatabaseConnection.ReadDataToDatabase(DataHandler.GetData(fromTableName), toTableName); } catch (Exception e) { SmtpHandler.SendMessage($"Error processing date transfer from {fromTableName} to {toTableName}.", $"Error processing date transfer from {fromTableName} to {toTableName}.\n\nEXCEPTION: {e}\n\nINNER EXCEPTION: {e.InnerException}"); } }
internal static void ReadDataToDatabase(DataTable data, string tableName) { try { var connection = Connect(); var columns = TableColumns(tableName); foreach (var column in data.Columns) { if (columns.Contains(column.ToString())) { continue; } AddColumnToTable(tableName, column.ToString()); SmtpHandler.SendMessage($"RQ API import added column {tableName}.", $"Column {column} added to {tableName} because it did not exist in the staging table."); } using (var bulkCopy = new SqlBulkCopy(connection)) { Console.WriteLine($"Attempting to save data to {tableName} SQL table."); connection.Open(); foreach (DataColumn column in data.Columns) { if (column.ColumnName != "Table_Id") { bulkCopy.ColumnMappings.Add(column.ColumnName, column.ColumnName); } } bulkCopy.BulkCopyTimeout = 600; bulkCopy.DestinationTableName = tableName; bulkCopy.BatchSize = 10000; try { bulkCopy.WriteToServer(data); } catch (SqlException e) { if (e.Message.Contains("Received an invalid column length from the bcp client for colid")) { var colNum = Regex.Match(e.Message, @"\d+").Value; var colName = columns[Convert.ToInt32(colNum) - 1]; UpdateColumnLength(tableName, colName); bulkCopy.WriteToServer(data); } else { throw; } } connection.Close(); Console.WriteLine($"Successfully saved data to {tableName} SQL table :D"); } } catch (Exception e) { Console.WriteLine($"Unable to save data to {tableName} table."); SmtpHandler.SendMessage($"RQ API import error: Unable to save data to {tableName} table", $"Unable to save data to {tableName} table. \n\n{e}\n\n{e.InnerException}"); } }