private void HandleBcp(SqlGenerator sqlGenerator, BcpGenerator bcpGenerator, TableMappingDefinition mappingDefinition, Dictionary<string, string> bcpExportCommands, Dictionary<string, string> bcpImportCommands) { Logger.Info("Handling BCP"); SourceTable srcTable = mappingDefinition.SourceTable; DestinationTable destTable = mappingDefinition.DestinationTable; string bcpPackagePath = Path.Combine(_packageOutputPath, CONVERSION_PACKAGE_FOLDER); // Generate and save format file Logger.Info("Generating BCP format file for EXPORT"); string bcpExportFormatFile = bcpGenerator.GenerateFormatFile(BcpDirection.Export); string exportFmtFileName = string.Format("{0}_EXPORT.fmt", destTable.Name); string exportFmtFilePath = Path.Combine(CONVERSION_PACKAGE_FOLDER, exportFmtFileName); SaveToFile(bcpPackagePath, exportFmtFileName, bcpExportFormatFile); Logger.Info("Generating BCP format file for IMPORT"); string bcpImportFormatFile = bcpGenerator.GenerateFormatFile(BcpDirection.Import); string importFmtFileName = string.Format("{0}_IMPORT.fmt", destTable.Name); string importFmtFilePath = Path.Combine(CONVERSION_PACKAGE_FOLDER, importFmtFileName); SaveToFile(bcpPackagePath, importFmtFileName, bcpImportFormatFile); // Generate export, import commands Logger.Info("Generating BCP Export/Import commands"); string bcpSelect = sqlGenerator.GenerateSelectStatement(); string dataFileName = string.Format("{0}-{1}_BCP.txt", srcTable.Name, destTable.Name); string dataFilePath = Path.Combine(CONVERSION_PACKAGE_FOLDER, dataFileName); File.Create(Path.Combine(_packageOutputPath, dataFilePath)); var bcpExportCommand = bcpGenerator.GenerateExportCommand(bcpSelect, exportFmtFilePath, dataFilePath); bcpExportCommands.Add(dataFileName, bcpExportCommand); var bcpImportCommand = bcpGenerator.GenerateImportCommand(importFmtFilePath, dataFilePath); bcpImportCommands.Add(dataFileName, bcpImportCommand); }
private string DoConversion() { Logger.Info("Doing conversion"); List<string> scriptNames = new List<string>(); Dictionary<string, string> bcpExportCommands = new Dictionary<string, string>(); Dictionary<string, string> bcpImportCommands = new Dictionary<string, string>(); _destinationDatabase.Tables.ForEach(t => { DestinationTable destinationTable = t; SourceTable sourceTable = null; try { Logger.Info("Processing " + destinationTable.Name); TableMappingConfiguration mappingConfig = GetTableMappingConfig(destinationTable.Name); sourceTable = GetSourceTable(destinationTable.Name, mappingConfig); var mappingDefinition = CreateTableMappingDefinition(sourceTable, destinationTable, mappingConfig); SqlGenerator sqlGenerator = new SqlGenerator(mappingDefinition, _options.CheckExistData); BcpGenerator bcpGenerator = new BcpGenerator(_options.ServerName, _options.InstanceName, mappingDefinition, _options.BcpMode); HandleBcp(sqlGenerator, bcpGenerator, mappingDefinition, bcpExportCommands, bcpImportCommands); HandleMaxTextUpdate(sqlGenerator, mappingDefinition, scriptNames); if(_options.BlobHandling) { HandleBlobUpdate(sqlGenerator, mappingDefinition, scriptNames); } } catch (AppException ex) { if (ex.ErrorCode == AppExceptionCodes.DATABASE_ERROR_TABLE_NOT_FOUND) { Logger.Warn(destinationTable.Name + " not mapped"); } } }); // Generate bat file string exportScript = BatGenerator.GenerateBcpExecuteBat(bcpExportCommands); SaveToFile(_packageOutputPath, "BCP_Export.bat", exportScript); Logger.Info("BCP Exporting data"); Process.Start(new ProcessStartInfo { WorkingDirectory = _packageOutputPath, FileName = "BCP_Export.bat" }); string importScript = BatGenerator.GenerateBcpExecuteBat(bcpImportCommands); //SaveToFile(_packageOutputPath, "BCP_Import.bat", importScript); List<string> scriptPaths = scriptNames.Select(s => Path.Combine(CONVERSION_PACKAGE_FOLDER, s)).ToList(); string updateScript = BatGenerator.GenerateSqlExecuteBat(scriptPaths, _options.ServerName, _options.InstanceName, _options.Username, _options.Password); //SaveToFile(_packageOutputPath, "Update_Blob_Text.bat", updateScript); string batScript = importScript + Environment.NewLine + updateScript; return batScript; }