Exemple #1
0
        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;
                    });
                }
            });
        }
Exemple #2
0
        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;
                    });
                }
            });
        }
Exemple #3
0
        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;
            });
        }