Example #1
0
        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}");
            }
        }