private void btnExportBill_Click(object sender, RoutedEventArgs e) { string srcTable = "SrcTableBill"; // 0. Создание таблицы в базе данных на основе текстового файла SqlConnection connection = new SqlConnection(ConfigurationManager.AppSettings["ConString"]); ExportTxtToTable.ExportDataTableToSQLServer(ExportTxtToTable.CreateDataTableFromFile(txtSourceFile.Text, "\t"), srcTable, connection); // В качестве первого параметра метода ExportDataTableToSQLServer вызывается метод CreateDataTableFromFile возрощающий созданный им DataTable, на оснвое которого будет создана таблица в базе методом ExportDataTableToSQLServer // Проверить существуют ли поля указанные в tbl_ConfRef в SrcTable string lstField = Model.ConfTable.CheckConfRef(connection, srcTable); if (lstField != "") { MessageBox.Show("В конфигурационной таблице перечислены поля, которых нет в исходном текстовом файле:\n\n" + lstField + "\n\n Экспорт прерван!", "Внимание!"); return; } EtranParsingServiceReference.ParsingServiceClient client = new EtranParsingServiceReference.ParsingServiceClient(ConfigurationManager.AppSettings["WcfEndpoint"]); client.Endpoint.Binding.SendTimeout = new TimeSpan(0, 0, 5, 0); //MessageBox.Show(client.ParseBill(connection)); EtranParsingServiceReference.ParsingResult[] parsingResult = client.ParseBill(connection); #region Лог string log = ""; // Текстовое представление результата импорта DataTable insertDataTable = new DataTable(); // Результат вставки в таблицу tbl_Bill DataTable updateDataTable = new DataTable(); // Результат обновления таблицы tbl_Bill DataTable insertDataTableBillCar = new DataTable(); // Результат вставки в таблицу tbl_CarBill // Перебор массива результатов for (int i = 0; i < parsingResult.Length; i++) { // Формирование тектового лога if (parsingResult[i].Operation == EtranParsingServiceReference.OperationList.I) { if (parsingResult[i].ExeptionMsg == null) { log += string.Format("Добавлено {0} записей в таблицу {1}. ", parsingResult[i].CountProcessedRecords, parsingResult[i].TableName); } else { log += string.Format("Ошибка во время добавления записей в таблицу {1}: {0}. ", parsingResult[i].ExeptionMsg, parsingResult[i].TableName); } } else if (parsingResult[i].Operation == EtranParsingServiceReference.OperationList.U) { if (parsingResult[i].ExeptionMsg == null) { log += string.Format("Обновлено {0} записей в таблице {1}. ", parsingResult[i].CountProcessedRecords, parsingResult[i].TableName); } else { log += string.Format("Ошибка во время обновления записей в таблице {1}: {0}. ", parsingResult[i].ExeptionMsg, parsingResult[i].TableName); } } // Получение табличного представления изменений. Определение отношения таблица-изменения if ((parsingResult[i].TableName == "tbl_Bill") & (parsingResult[i].Operation == EtranParsingServiceReference.OperationList.I)) { insertDataTable = parsingResult[i].DataTableResult; } if ((parsingResult[i].TableName == "tbl_Bill") & (parsingResult[i].Operation == EtranParsingServiceReference.OperationList.U)) { updateDataTable = parsingResult[i].DataTableResult; } if ((parsingResult[i].TableName == "tbl_BillCar") & (parsingResult[i].Operation == EtranParsingServiceReference.OperationList.I)) { insertDataTableBillCar = parsingResult[i].DataTableResult; } } this.textBlockCarNumLog.Text = ""; this.textBlockCarNumLog.Text += log; // Формирование табличного лога по tbl_Bill IEnumerable <DataRow> unionLog = null; if ((insertDataTable != null) & (updateDataTable != null)) { // 1. Выбор из таблицы updateDataTable идешников, которых нету в insertDataTable var exceptedRecords = (from ut in updateDataTable.AsEnumerable() select ut[0]) .Except(from it in insertDataTable.AsEnumerable() select it[0]); // 2. Выбор полной строки из updateDataTable на основе идешников которых нет в insertDataTable var join = from ut in updateDataTable.AsEnumerable() join r in exceptedRecords on ut.ItemArray[0] equals r select ut; // 3. Совмещение полного списка insertDataTable с сформированным join unionLog = (from it in insertDataTable.AsEnumerable() select it).Union(join); } else if (insertDataTable != null) { unionLog = from it in insertDataTable.AsEnumerable() select it; } else if (updateDataTable != null) { unionLog = from it in updateDataTable.AsEnumerable() select it; } if ((unionLog != null) && (unionLog.ToArray().Count() != 0)) { DataRow[] dataRowArray = unionLog.ToArray(); DataTable dataTable = dataRowArray.CopyToDataTable(); this.dataGridBillLog.ItemsSource = dataTable.DefaultView; } // Формирование табличного лога по tbl_CarBill IEnumerable <DataRow> insertBillCarLog = null; if (insertDataTableBillCar != null) { insertBillCarLog = from it in insertDataTableBillCar.AsEnumerable() select it; } if ((insertBillCarLog != null) && (insertBillCarLog.ToArray().Count() != 0)) { DataRow[] billCarDataRowArray = insertBillCarLog.ToArray(); DataTable billCarDataTable = billCarDataRowArray.CopyToDataTable(); this.dataGridBillCarLog.ItemsSource = billCarDataTable.DefaultView; } #endregion }
private void btnExportZ_Click(object sender, RoutedEventArgs e) { string srcTable = "SrcTableZ"; // 0. Создание таблицы в базе данных на основе текстового файла SqlConnection connection = new SqlConnection(ConfigurationManager.AppSettings["ConString"]); ExportTxtToTable.ExportDataTableToSQLServer(ExportTxtToTable.CreateDataTableFromFile(txtSourceFile.Text, "\t"), srcTable, connection); // В качестве первого параметра метода ExportDataTableToSQLServer вызывается метод CreateDataTableFromFile возрощающий созданный им DataTable, на оснвое которого будет создана таблица в базе методом ExportDataTableToSQLServer // Проверить существуют ли поля указанные в tbl_ConfRef в SrcTable string lstField = Model.ConfTable.CheckConfRef(connection, srcTable); if (lstField != "") { MessageBox.Show("В конфигурационной таблице перечислены поля, которых нет в исходном текстовом файле:\n\n" + lstField + "\n\n Экспорт прерван!", "Внимание!"); return; } EtranParsingServiceReference.ParsingServiceClient client = new EtranParsingServiceReference.ParsingServiceClient(); client.Endpoint.Binding.SendTimeout = new TimeSpan(0, 0, 5, 0); //MessageBox.Show(client.ParseZ(connection)); EtranParsingServiceReference.ParsingResult[] parsingResult = client.ParseZ(connection); #region Лог string log = ""; DataTable insertDataTable = new DataTable(); DataTable updateDataTable = new DataTable(); for (int i = 0; i < parsingResult.Length; i++) { /*if ((parsingResult[i].CountProcessedRecords > 0) & (dt.Rows.Count == 0)) * { * dt = parsingResult[i].DataTableResult; * } * else if ((parsingResult[i].CountProcessedRecords > 0) & (dt.Rows.Count != 0)) * { * dt.Merge(parsingResult[i].DataTableResult); * }*/ if (parsingResult[i].Operation == EtranParsingServiceReference.OperationList.I) //ParsingResult.OperationList.I)//'I') { if (parsingResult[i].ExeptionMsg == null) { log += string.Format("Добавлено {0} записей в таблицу {1}. ", parsingResult[i].CountProcessedRecords, parsingResult[i].TableName); } else { log += string.Format("Ошибка во время добавления заявок: {0}. ", parsingResult[i].ExeptionMsg); } } else if (parsingResult[i].Operation == EtranParsingServiceReference.OperationList.U) // ParsingResult.OperationList.U)//'U') { if (parsingResult[i].ExeptionMsg == null) { log += string.Format("Обновлено {0} записей в таблице {1}. ", parsingResult[i].CountProcessedRecords, parsingResult[i].TableName); } else { log += string.Format("Ошибка во время обновления заявок: {0}. ", parsingResult[i].ExeptionMsg); } } if ((parsingResult[i].TableName == "tbl_Zayavka") & (parsingResult[i].Operation == EtranParsingServiceReference.OperationList.I)) { insertDataTable = parsingResult[i].DataTableResult; } if ((parsingResult[i].TableName == "tbl_Zayavka") & (parsingResult[i].Operation == EtranParsingServiceReference.OperationList.U)) { updateDataTable = parsingResult[i].DataTableResult; } } textBlockZayavkaLog.Text += log; /*dataGrid1.ItemsSource = dt.DefaultView;*/ IEnumerable <DataRow> unionLog = null; if (insertDataTable != null) { // 1. Выбор из таблицы updateDataTable идешников, которых нету в insertDataTable var exceptedRecords = (from ut in updateDataTable.AsEnumerable() select ut[0]) .Except(from it in insertDataTable.AsEnumerable() select it[0]); // 2. Выбор полной строки из updateDataTable на основе идешников которых нет в insertDataTable var join = from ut in updateDataTable.AsEnumerable() join r in exceptedRecords on ut.ItemArray[0] equals r select ut; // 3. Совмещение полного списка insertDataTable с сформированным join unionLog = (from it in insertDataTable.AsEnumerable() select it).Union(join); } else if (insertDataTable != null) { unionLog = from it in insertDataTable.AsEnumerable() select it; } else if ((updateDataTable != null) & (updateDataTable != null)) { unionLog = from it in updateDataTable.AsEnumerable() select it; } if ((unionLog != null) && (unionLog.ToArray().Count() != 0)) { DataRow[] dataRowArray = unionLog.ToArray(); DataTable dataTable = dataRowArray.CopyToDataTable(); this.dataGridZayavkaLog.ItemsSource = dataTable.DefaultView; } #endregion }