public static bool TryCopyToDB(PostgreSql db, ExcelImportBase import) { var dbRows = new List <Dictionary <String, object> >(); if (!db.ExecuteQuery($"select * from {import.TableName};", ref dbRows)) { Console.WriteLine($"DB query failed, {import.TableName}"); return(false); } var dbValues = new List <object[]>(); if (!GetAllValues(dbRows, import.ColumnNames, ref dbValues)) { Console.WriteLine($"Get db query failed, {import.TableName}"); return(false); } var tableValues = new List <object[]>(); import.ResetId(); foreach (var row in import.GetRows()) { try { var tableValue = import.GetValues(row); tableValues.Add(tableValue); } catch (Exception e) { errorMsgQ.Enqueue($"{import.FileName} 테이블에서 예외가 발생하였습니다."); return(false); } } var addedTable = new List <object[]>(); var missingTable = new List <object[]>(); if (!GetAllChanges(ref tableValues, ref dbValues, ref addedTable, ref missingTable)) { Console.WriteLine($"{import.TableName} 테이블 데이터의 바뀐 내용이 없습니다."); return(true); } else { var modifiedTable = new List <object[]>(); GetModifiedTable(ref addedTable, ref modifiedTable, ref missingTable, import.FileName); var changes = new Tuple <ExcelImportBase, List <object[]>, List <object[]>, List <object[]> >(import, addedTable, modifiedTable, missingTable); changesQ.Enqueue(changes); Console.WriteLine($"{import.TableName} 테이블의 수정 사항이 생겼습니다."); return(true); } }
public static int ExecuteImport(string dirPathName) { AppSettingsReader settingsReader = new AppSettingsReader(); string connStr = settingsReader.GetValue("PostgreSQLConnectionString", typeof(string)) as string; Console.WriteLine(connStr); PostgreSql db = new PostgreSql(connStr); Task[] tasks = new Task[8]; for (int i = 0; i < tasks.Length; i++) { tasks[i] = Task.Run(() => { PostgreSql taskdb = new PostgreSql(connStr); while (true) { if (!excelSheetQ.TryDequeue(out var import)) { return; } TryCopyToDB(taskdb, import); } }); } foreach (var task in tasks) { task.Wait(); } if (PrintErrorMsg()) { return(1); } while (true) { if (!changesQ.TryDequeue(out var changes)) { break; } ApplyChanges(db, changes); } return(0); }
private static bool ApplyChanges(PostgreSql db, Tuple <ExcelImportBase, List <object[]>, List <object[]>, List <object[]> > changes) { var import = changes.Item1; var addedTable = changes.Item2; var modifiedTable = changes.Item3; var missingTable = changes.Item4; int idIdx = 0; idIdxDic.TryGetValue(import.FileName, out idIdx); Console.ForegroundColor = ConsoleColor.Green; Console.WriteLine($"{import.TableName} 테이블에 추가된 항목 수 : {addedTable.Count}"); foreach (object[] added in addedTable) { Console.WriteLine($"{import.TableName} 테이블에 추가된 항목의 id : {added[idIdx]}"); } Console.ForegroundColor = ConsoleColor.Yellow; Console.WriteLine($"{import.TableName} 테이블에 수정된 항목 수 : {modifiedTable.Count}"); foreach (object[] modi in modifiedTable) { Console.WriteLine($"{import.TableName} 테이블에 수정된 항목의 id : {modi[idIdx]}"); } Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine($"{import.TableName} 테이블에 누락된 항목 수 : {missingTable.Count}"); foreach (object[] missing in missingTable) { Console.WriteLine($"{import.TableName} 테이블에 누락된 항목의 id : {missing[idIdx]}"); } Console.ResetColor(); if (!DecideApply(import.TableName)) { return(false); } if (!db.ImportFrom(import)) { Console.WriteLine($"DB Insert Fail!!, {import.TableName}"); return(false); } return(true); }