private void Window_Loaded(object sender, RoutedEventArgs e)
        {
            if (!_loaded)
            {
                DataConnectionHelper.Monitor = EQATEC.Analytics.Monitor.AnalyticsMonitorFactory.CreateMonitor("C244D8923C7C4235A1A24AB1127BD521");
                DataConnectionHelper.Monitor.Start();

                ExtractDll("QuickGraph.dll");
                ExtractDll("QuickGraph.Data.dll");
                
                if (DataConnectionHelper.Argument != null)
                {
                    string filePath = DataConnectionHelper.Argument.ToLowerInvariant();
                    if (System.IO.File.Exists(filePath))
                    {
                        var connStr = string.Format("Data Source={0};Max Database Size=4091", filePath);
                        var databaseList = DataConnectionHelper.GetDataConnections();
                        var item = databaseList.Where(d => d.Value.StartsWith(connStr)).FirstOrDefault();
                        if (item.Value == null)
                        {
                            try
                            {
                                TrySave(connStr);
                            }
                            catch (Exception ex)
                            {
                                string error = DataConnectionHelper.ShowErrors(ex);
                                if (error.Contains("Minor Err.: 25028"))
                                {
                                    PasswordDialog pwd = new PasswordDialog();
                                    pwd.ShowDialog();
                                    if (pwd.DialogResult.HasValue && pwd.DialogResult.Value == true && !string.IsNullOrWhiteSpace(pwd.Password))
                                    {   
                                        connStr = connStr + ";Password="******"SQL Server Compact Toolbox for runtime " + RepoHelper.apiVer;
                _explorerControl = new ExplorerControl(fabTab);
                MainGrid.Children.Add(_explorerControl);
            }
            _loaded = true;
        }
        private void FillTableItems(KeyValuePair<string, DatabaseInfo> database, DatabaseTreeViewItem parentItem, Exception ex, RoutedEventArgs args)
        {
            if (ex != null)
            {
                string error = Helpers.DataConnectionHelper.CreateEngineHelper(database.Value.DatabaseType).FormatError(ex);
                if (error.Contains("Minor Err.: 25028"))
                {
                    PasswordDialog pwd = new PasswordDialog();
                    pwd.ShowModal();
                    if (pwd.DialogResult.HasValue && pwd.DialogResult.Value == true && !string.IsNullOrWhiteSpace(pwd.Password))
                    {
                        database.Value.ConnectionString = database.Value.ConnectionString + ";Password="******"locale identifier")
                                    dbInfo.LCID = int.Parse(values.Value);
                                if (values.Key.ToLowerInvariant() == "encryption mode")
                                    dbInfo.EncryptionMode = values.Value;
                                if (string.IsNullOrWhiteSpace(dbInfo.EncryptionMode))
                                    dbInfo.EncryptionMode = "None";
                                if (values.Key.ToLowerInvariant() == "case sensitive")
                                    dbInfo.CaseSensitive = bool.Parse(values.Value);
                                if (values.Key == "DatabaseSize")
                                    dbInfo.Size = values.Value;
                                if (values.Key == "SpaceAvailable")
                                    dbInfo.SpaceAvailable = values.Value;
                                if (values.Key == "Created")
                                    dbInfo.Created = values.Value;
                                if (values.Key == "ServerVersion")
                                    dbInfo.ServerVersion = values.Value;
                            }
                            TrackSelection(dbInfo);
                        }
                    }
                    var tables = _repository.GetAllTableNames();
                    var columns = _repository.GetAllColumns();
                    var primaryKeys = _repository.GetAllPrimaryKeys();
                    var foreignKeys = _repository.GetAllForeignKeys();
                    var indexes = _repository.GetAllIndexes();

                    foreach (var table in tables)
                    {
                        if (!Properties.Settings.Default.DisplayDescriptionTable && table.Equals("__ExtendedProperties"))
                        {
                            continue;
                        }
                        var item = TreeViewHelper.CreateTreeViewItemWithImage(table, "../Resources/table_16xLG.png", true);
                        item.ContextMenu = new TableContextMenu(new MenuCommandParameters { DatabaseInfo = database.Value, Name = table, MenuItemType = MenuType.Table }, _parentWindow);
                        item.ToolTip = table;
                        item.Tag = new TableInfo { Name = table, RowCount = _repository.GetRowCount(table) };
                        if (DescriptionCache != null)
                        {
                            var desc = DescriptionCache.Where(dc => dc.Parent == null && dc.Object == table).Select(dc => dc.Description).SingleOrDefault();
                            if (!string.IsNullOrWhiteSpace(desc))
                            {
                                item.ToolTip = desc;
                            }
                        }

                        var tableColumns = (from col in columns
                                            where col.TableName == table
                                            select col).ToList<Column>();
                        var tablePrimaryKeys = primaryKeys.Where(pk => pk.TableName == table).ToList();
                        var tableForeignKeys = foreignKeys.Where(fk => fk.ConstraintTableName == table).ToList();
                        var tableIndexes = indexes.Where(i => i.TableName == table).ToList();
                        parentItem.Items.Add(item);
                        item.Expanded += (s, e) => GetTableColumns(s, e, tableColumns, tableForeignKeys, tablePrimaryKeys, tableIndexes, database);
                    }
                }
            }
            catch (Exception ex2)
            {
                Helpers.DataConnectionHelper.SendError(ex2, database.Value.DatabaseType, false);
            }
        }
        public void SetPassword(object sender, ExecutedRoutedEventArgs e)
        {
            var databaseInfo = ValidateMenuInfo(sender);
            if (databaseInfo == null) return;
            try
            {
                var dbInfo = databaseInfo.DatabaseInfo;
                var pwd = new PasswordDialog();
                pwd.ShowModal();
                if (pwd.DialogResult.HasValue && pwd.DialogResult.Value)
                {
                    var helper = DataConnectionHelper.CreateEngineHelper(databaseInfo.DatabaseInfo.DatabaseType);
                    var newConnectionString = helper.ChangeDatabasePassword(databaseInfo.DatabaseInfo.ConnectionString, pwd.Password);
                    if (dbInfo.FromServerExplorer)
                    {
                        var providerId = Resources.SqlCompact35Provider;
                        if (dbInfo.DatabaseType == DatabaseType.SQLCE40)
                            providerId = Resources.SqlCompact40Provider;
                        DataConnectionHelper.RemoveDataConnection(package, dbInfo.ConnectionString, new Guid(providerId));
                    }
                    else
                    {
                        DataConnectionHelper.RemoveDataConnection(databaseInfo.DatabaseInfo.ConnectionString);
                    }

                    if (!string.IsNullOrEmpty(newConnectionString))
                    {
                        DataConnectionHelper.SaveDataConnection(newConnectionString, dbInfo.DatabaseType, package);
                        EnvDTEHelper.ShowMessage("Password was set, and connection updated");
                    }
                    else
                    {
                        EnvDTEHelper.ShowMessage("Password was set, but could not update connection, please reconnect the database");
                    }

                    var control = _parentWindow.Content as ExplorerControl;
                    if (control != null) control.BuildDatabaseTree();
                    DataConnectionHelper.LogUsage("DatabaseMaintainSetPassword");                    
                }
            }
            catch (Exception ex)
            {
                DataConnectionHelper.SendError(ex, databaseInfo.DatabaseInfo.DatabaseType, false);
            }
        }