protected override void OkCommandExecuted(object obj) { InProgress = true; ProgressIsIndeterminate = true; var script = _service.ScriptHelper.ExtractScriptLines(PHmiModelContext.GetPHmiScriptStream()) .Concat(_service.ScriptHelper.ExtractScriptLines(PHmiModelContext.GetPHmiScriptRowsStream()) .Select(s => s.Replace("1234567890", Guid.NewGuid().ToString())) .Select(s => s.Replace("0987654321", Guid.NewGuid().ToString()))) .ToArray(); Progress = 0; ProgressMax = script.Length; _service.ActionHelper.Async(() => { try { _service.NpgHelper.CreateDatabase(ConnectionParameters); _service.ActionHelper.Dispatch(() => { ProgressIsIndeterminate = false; }); _service.NpgHelper.ExecuteScript( ConnectionParameters.ConnectionString, script.Select(r => new NpgQuery(r)).ToArray(), true, row => _service.ActionHelper.Dispatch(() => { Progress = row; })); _service.ActionHelper.Dispatch(() => { Progress = ProgressMax; base.OkCommandExecuted(obj); }); } catch (Exception exception) { ExceptionDialog.Show(exception, View); } finally { _service.ActionHelper.Dispatch(() => { InProgress = false; ProgressIsIndeterminate = false; }); } }); }
protected override void OkCommandExecuted(object obj) { InProgress = true; ProgressIsIndeterminate = true; var script = _service.ScriptHelper.ExtractScriptLines(PHmiModelContext.GetPHmiScriptStream()); Progress = 0; ProgressMax = script.Length; _service.ActionHelper.Async(() => { FileStream stream = null; try { _service.NpgHelper.CreateDatabase(ConnectionParameters); _service.ActionHelper.Dispatch(() => { ProgressIsIndeterminate = false; }); _service.NpgHelper.ExecuteScript( ConnectionParameters.ConnectionString, script.Select(r => new NpgQuery(r)).ToArray(), true, row => _service.ActionHelper.Dispatch(() => { Progress = row; })); _service.ActionHelper.Dispatch(() => { ProgressIsIndeterminate = true; }); stream = File.OpenRead(FileName); var binaryFormatter = _service.ExImHelper.CreateFormatter(); var prevTable = string.Empty; var createScript = _service.ScriptHelper.ExtractScriptLines( PHmiModelContext.GetPHmiScriptStream()); var tables = _service.ExImHelper.GetTables(createScript); var serialHelper = SerialHelper.Create(tables); using (var connection = new NpgsqlConnection(ConnectionParameters.ConnectionString)) { while (stream.Position != stream.Length) { var tableData = (TableData)binaryFormatter.Deserialize(stream); var scriptItem = _service.ExImHelper.GetInsertScriptItem(tableData); if (scriptItem == null) { continue; } var count = _service.NpgHelper.ExecuteNonQuery(connection, scriptItem); var table = prevTable; _service.ActionHelper.Dispatch(() => { if (table != tableData.TableName && !string.IsNullOrEmpty(table)) { TablesStored++; } RowsStored += count; }); prevTable = tableData.TableName; serialHelper.Update(tableData); } foreach (var alterScript in serialHelper.CreateAlterScriptItem()) { _service.NpgHelper.ExecuteNonQuery(connection, alterScript); } } _service.DialogHelper.Message( string.Format("{0} {1}{2}{3} {4}", Res.TablesStored, TablesStored.ToString("N0"), Environment.NewLine, Res.RowsStored, RowsStored.ToString("N0")), Res.ImportCompleted, owner: View); _service.ActionHelper.Dispatch(() => base.OkCommandExecuted(obj)); } catch (Exception exception) { ExceptionDialog.Show(exception, View); } finally { if (stream != null) { stream.Dispose(); } _service.ActionHelper.Dispatch(() => { InProgress = false; ProgressIsIndeterminate = false; }); } }); }
private void Export(string fileName) { _service.ActionHelper.Dispatch(() => { InProgress = true; TablesStored = 0; RowsStored = 0; }); FileStream stream = null; try { stream = new FileStream(fileName, FileMode.Create); BinaryFormatter binaryFormatter = _service.ExImHelper.CreateFormatter(); var script = _service.ScriptHelper.ExtractScriptLines(PHmiModelContext.GetPHmiScriptStream()); var tables = _service.ExImHelper.GetTables(script); foreach (NpgTableInfo table in tables) { var startParameters = new KeyValuePair <string, object> [0]; var primaryKeyIndexes = table.GetPrimaryKeyIndexes(); using (var connection = new NpgsqlConnection(ConnectionParameters.ConnectionString)) { while (true) { var result = GetData(connection, table, startParameters); var tableData = new TableData { TableName = table.Name, Columns = table.Columns.Select(c => c.Name).ToArray(), Data = result }; binaryFormatter.Serialize(stream, tableData); _service.ActionHelper.Dispatch(() => { RowsStored += result.Length; }); if (result.Length != MaxRows) { break; } startParameters = new KeyValuePair <string, object> [table.PrimaryKey.Length]; var lastData = result[MaxRows - 1]; for (var i = 0; i < table.PrimaryKey.Length; i++) { startParameters[i] = new KeyValuePair <string, object>( table.PrimaryKey[i], lastData[primaryKeyIndexes[i]]); } } } _service.ActionHelper.Dispatch(() => { TablesStored++; }); } } catch (Exception exception) { _service.DialogHelper.Exception(exception, View); } finally { if (stream != null) { stream.Close(); } } _service.ActionHelper.Dispatch(() => { InProgress = false; View.Title = Res.ExportCompleted; }); }