示例#1
0
        public void AddCe35Database(object sender, ExecutedRoutedEventArgs e)
        {
            // http://www.mztools.com/articles/2007/MZ2007011.aspx
            if (!Helpers.DataConnectionHelper.DDEXProviderIsInstalled(new Guid(Resources.SqlCompact35Provider)))
            {
                EnvDTEHelper.ShowError("The version 3.5 Visual Studio DDEX provider is not installed, cannot add connection");
                return;
            }
            try
            {
                var objIVsDataConnectionDialogFactory = package.GetServiceHelper(typeof(IVsDataConnectionDialogFactory)) as IVsDataConnectionDialogFactory;
                var objIVsDataConnectionDialog        = objIVsDataConnectionDialogFactory.CreateConnectionDialog();
                objIVsDataConnectionDialog.AddAllSources();
                objIVsDataConnectionDialog.SelectedSource   = new Guid("130BADA6-E128-423c-9D07-02E4734D45D4");
                objIVsDataConnectionDialog.SelectedProvider = new Guid(Resources.SqlCompact35Provider);

                if (objIVsDataConnectionDialog.ShowDialog() && objIVsDataConnectionDialog.SelectedProvider == new Guid(Resources.SqlCompact35Provider))
                {
                    Helpers.DataConnectionHelper.SaveDataConnection(package, objIVsDataConnectionDialog.EncryptedConnectionString, objIVsDataConnectionDialog.DisplayConnectionString, DatabaseType.SQLCE35, new Guid(Resources.SqlCompact35Provider));
                    ExplorerControl control = _parentWindow.Content as ExplorerControl;
                    control.BuildDatabaseTree();
                    Helpers.DataConnectionHelper.LogUsage("DatabasesAddCe35Database");
                }
                objIVsDataConnectionDialog.Dispose();
            }
            catch (Exception ex)
            {
                Helpers.DataConnectionHelper.SendError(ex, DatabaseType.SQLCE35);
            }
        }
示例#2
0
        public void DropSubscription(object sender, ExecutedRoutedEventArgs e)
        {
            if (EnvDTEHelper.ShowMessageBox("Do you really want to remove replication metadata from the SQL Server Compact database?", Microsoft.VisualStudio.Shell.Interop.OLEMSGBUTTON.OLEMSGBUTTON_YESNO, Microsoft.VisualStudio.Shell.Interop.OLEMSGDEFBUTTON.OLEMSGDEFBUTTON_SECOND, Microsoft.VisualStudio.Shell.Interop.OLEMSGICON.OLEMSGICON_WARNING) == System.Windows.Forms.DialogResult.No)
            {
                return;
            }

            var menuItem = sender as MenuItem;

            if (menuItem == null)
            {
                return;
            }
            var menuInfo = menuItem.CommandParameter as MenuCommandParameters;

            if (menuInfo == null)
            {
                return;
            }
            try
            {
                SqlCeReplicationHelper.DropPublication(menuInfo.DatabaseInfo.ConnectionString, menuInfo.Name);
                if (_parentWindow != null && _parentWindow.Content != null)
                {
                    ExplorerControl control = _parentWindow.Content as ExplorerControl;
                    control.BuildDatabaseTree();
                }
                Helpers.DataConnectionHelper.LogUsage("SubscriptionDrop");
            }
            catch (Exception ex)
            {
                Helpers.DataConnectionHelper.SendError(ex, menuInfo.DatabaseInfo.DatabaseType, false);
            }
        }
示例#3
0
        public void DropScope(object sender, ExecutedRoutedEventArgs e)
        {
            if (EnvDTEHelper.ShowMessageBox("Do you really want to deprovision this scope?", Microsoft.VisualStudio.Shell.Interop.OLEMSGBUTTON.OLEMSGBUTTON_YESNO, Microsoft.VisualStudio.Shell.Interop.OLEMSGDEFBUTTON.OLEMSGDEFBUTTON_SECOND, Microsoft.VisualStudio.Shell.Interop.OLEMSGICON.OLEMSGICON_WARNING) == System.Windows.Forms.DialogResult.No)
            {
                return;
            }

            var menuItem = sender as MenuItem;

            if (menuItem == null)
            {
                return;
            }
            var menuInfo = menuItem.CommandParameter as MenuCommandParameters;

            if (menuInfo == null)
            {
                return;
            }
            try
            {
                SyncFxHelper.DeprovisionSqlCeScope(menuInfo.DatabaseInfo.ConnectionString, menuInfo.Name);
                EnvDTEHelper.ShowMessage("Scope deprovisioned");
                if (_parentWindow != null && _parentWindow.Content != null)
                {
                    ExplorerControl control = _parentWindow.Content as ExplorerControl;
                    control.BuildDatabaseTree();
                }
                Helpers.DataConnectionHelper.LogUsage("SyncScopeDrop");
            }
            catch (Exception ex)
            {
                Helpers.DataConnectionHelper.SendError(ex, menuInfo.DatabaseInfo.DatabaseType);
            }
        }
        public int OnClose(ref uint pgrfSaveOptions)
        {
            if (!Properties.Settings.Default.PromptToSaveChangedScript)
            {
                return(Microsoft.VisualStudio.VSConstants.S_OK);
            }
            // Check if your content is dirty here, then
            var window = this.control as SqlEditorControl;

            if (window != null && window.IsDirty && !mustClose)
            {
                // Prompt a dialog
                DialogResult res = EnvDTEHelper.ShowMessageBox("This script has been modified. Do you want to save the changes ?", OLEMSGBUTTON.OLEMSGBUTTON_YESNOCANCEL, OLEMSGDEFBUTTON.OLEMSGDEFBUTTON_FIRST, OLEMSGICON.OLEMSGICON_QUERY);
                // If the users wants to save
                if (res == DialogResult.Yes)
                {
                    window.SaveScript(true);
                }
                if (res == DialogResult.Cancel)
                {
                    // If "cancel" is clicked, abort the close
                    return(Microsoft.VisualStudio.VSConstants.E_ABORT);
                }
                if (res == DialogResult.No)
                {
                    mustClose = true;
                }
            }
            return(Microsoft.VisualStudio.VSConstants.S_OK);
        }
示例#5
0
 private void ShowPlanButton_Click(object sender, RoutedEventArgs e)
 {
     if (string.IsNullOrWhiteSpace(SqlText))
     {
         return;
     }
     Helpers.DataConnectionHelper.LogUsage("EditorShowPlan");
     try
     {
         using (var repository = Helpers.DataConnectionHelper.CreateRepository(DatabaseInfo))
         {
             var textBox = new TextBox();
             textBox.FontFamily = fontFamiliy;
             textBox.FontSize   = fontSize;
             string sql      = GetSqlFromSqlEditorTextBox();
             string showPlan = repository.ParseSql(sql);
             try
             {
                 TryLaunchSqlplan(showPlan);
             }
             catch (System.ComponentModel.Win32Exception)
             {
                 EnvDTEHelper.ShowError("This feature requires Visual Studio 2010 Premium / SQL Server Management Studio to be installed");
             }
             catch (Exception ex)
             {
                 Helpers.DataConnectionHelper.SendError(ex, DatabaseType.SQLCE35);
             }
         }
     }
     catch (Exception sqlException)
     {
         ParseSqlErrorToResultsBox(Helpers.DataConnectionHelper.CreateEngineHelper(DatabaseInfo.DatabaseType).FormatError(sqlException));
     }
 }
 private void RuntimeMissing_Click(object sender, RoutedEventArgs e)
 {
     if (!DataConnectionHelper.IsV35Installed() && !DataConnectionHelper.IsV40Installed())
     {
         EnvDTEHelper.ShowMessage("The SQL Server Compact 3.5 SP2 and 4.0 runtimes are not properly installed,\r\nso many features are not available,\r\ninstall or repair SQL Server Compact 3.5 SP2 or 4.0 Desktop to remedy");
     }
 }
示例#7
0
        private bool SaveSettings()
        {
            try
            {
                TableName = this.txtTableDesc.Text;
                if (string.IsNullOrEmpty(TableName))
                {
                    EnvDTEHelper.ShowError("Table name is required");
                    return(false);
                }

                var validation = TableColumn.ValidateColumns(columns.ToList());
                if (!string.IsNullOrEmpty(validation))
                {
                    EnvDTEHelper.ShowError(validation);
                    return(false);
                }
                TableColumns = TableColumn.BuildColumns(columns.ToList(), TableName);
                PkScript     = TableColumn.BuildPkScript(columns.ToList(), TableName);
                if (_dbType == DatabaseType.SQLite)
                {
                    PkScript = BuildSQLitePkScript(columns.ToList(), TableName);
                }
                else
                {
                    PkScript = TableColumn.BuildPkScript(columns.ToList(), TableName);
                }
                return(true);
            }
            catch (Exception ex)
            {
                Helpers.DataConnectionHelper.SendError(ex, DatabaseType.SQLServer);
            }
            return(false);
        }
示例#8
0
        private void projectItemGenerator_ProjectItemDeleted(object sender, ProjectItemDeletedEventArgs e)
        {
            try
            {
                var project = EnvDTEHelper.Instance.GetProject(e.ProjectName);
                var parent  = EnvDTEHelper.Instance.GetProjectItem(e.ProjectName, e.ParentItemName, e.ParentItemType);

                var fileStateInfo = new FileStateInfo();
                if (e.ParentItemName != string.Empty)
                {
                    EnvDTEHelper.Instance.DeleteProjectItem(parent, e.ProjectItemName, out fileStateInfo);
                }
                else
                {
                    EnvDTEHelper.DeleteProjectItem(project, e.ProjectItemName, out fileStateInfo);
                }
                Application.DoEvents();

                //Write Log
                nHydrateLog.LogInfo("Project Item Deleted: {0}", e.ProjectItemName);
                e.FileState = fileStateInfo.FileState;
                e.FullName  = fileStateInfo.FileName;
                //this.OnProjectItemGenerated(sender, e);
            }
            catch (Exception ex)
            {
                //this.OnProjectItemGeneratedError(this, e);
                nHydrateLog.LogWarning(ex);
            }
        }
示例#9
0
        private void ResultsetGrid_Load(object sender, EventArgs e)
        {
            this.tableName = TableName;

            try
            {
                this.dataGridView1.AutoGenerateColumns = true;
                this.dataGridView1.DataError          += new DataGridViewDataErrorEventHandler(dataGridView1_DataError);
                imageContext.Items.Add("Import Image", null, new EventHandler(ImportImage));
                imageContext.Items.Add("Export Image", null, new EventHandler(ExportImage));
                imageContext.Items.Add("Delete Image", null, new EventHandler(DeleteImage));

                LoadData(SqlText);

                this.dataGridView1.ReadOnly = ReadOnly;
                if (this.ReadOnlyColumns != null)
                {
                    foreach (int x in ReadOnlyColumns)
                    {
                        this.dataGridView1.Columns[x].ReadOnly = true;
                        this.dataGridView1.Columns[x].DefaultCellStyle.ForeColor = SystemColors.GrayText;
                    }
                }
                if (Properties.Settings.Default.MultiLineTextEntry)
                {
                    foreach (DataGridViewColumn col in dataGridView1.Columns)
                    {
                        if (col is DataGridViewTextBoxColumn)
                        {
                            col.DefaultCellStyle.WrapMode = DataGridViewTriState.True;
                        }
                    }
                    this.dataGridView1.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.AllCells;
                }

                this.bindingNavigatorAddNewItem.Enabled = !ReadOnly;
                this.bindingNavigatorDeleteItem.Enabled = !ReadOnly;
                this.toolStripButton1.Enabled           = !ReadOnly;

                this.dataGridView1.ClipboardCopyMode       = DataGridViewClipboardCopyMode.EnableAlwaysIncludeHeaderText;
                this.dataGridView1.AllowUserToOrderColumns = true;
                this.dataGridView1.MultiSelect             = false;
                //if (Properties.Settings.Default.ShowNullValuesAsNULL)
                //{
                //    this.dataGridView1.DefaultCellStyle.NullValue = "NULL";
                //}
                this.dataGridView1.KeyDown += new KeyEventHandler(dataGridView1_KeyDown);
                //this.dataGridView1.CellContentClick += new DataGridViewCellEventHandler(dataGridView1_CellContentClick);
                dgs = new DataGridViewSearch(this.dataGridView1);
                if (ReadOnly)
                {
                    this.dataGridView1.DefaultCellStyle.ForeColor = SystemColors.GrayText;
                    EnvDTEHelper.ShowError("No primary keys on table, data is read-only");
                }
            }
            catch (Exception ex)
            {
                Helpers.DataConnectionHelper.SendError(ex, DatabaseInfo.DatabaseType, false);
            }
        }
示例#10
0
        public void ImportData(object sender, ExecutedRoutedEventArgs e)
        {
            var menuInfo = ValidateMenuInfo(sender);

            if (menuInfo == null)
            {
                return;
            }
            try
            {
                using (var repository = DataConnectionHelper.CreateRepository(menuInfo.DatabaseInfo))
                {
                    var generator = DataConnectionHelper.CreateGenerator(repository, menuInfo.DatabaseInfo.DatabaseType);

                    var imo = new ImportDialog
                    {
                        SampleHeader = generator.GenerateTableColumns(menuInfo.Name),
                        Separator    =
                            System.Globalization.CultureInfo.CurrentCulture.TextInfo.ListSeparator.ToCharArray()[0]
                    };

                    if (imo.ShowModal() != true)
                    {
                        return;
                    }
                    if (string.IsNullOrWhiteSpace(imo.File) || !System.IO.File.Exists(imo.File))
                    {
                        return;
                    }
                    using (var reader = new CsvReader(imo.File, Encoding.UTF8))
                    {
                        reader.ValueSeparator = imo.Separator;
                        var hr = reader.ReadHeaderRecord();
                        if (generator.ValidColumns(menuInfo.Name, hr.Values))
                        {
                            var i = 1;
                            foreach (var record in reader.DataRecords)
                            {
                                generator.GenerateTableInsert(menuInfo.Name, hr.Values, record.Values, i);
                                i++;
                            }
                        }
                    }
                    OpenSqlEditorToolWindow(menuInfo, generator.GeneratedScript);
                    DataConnectionHelper.LogUsage("TableImport");
                }
            }
            catch (System.IO.IOException iox)
            {
                EnvDTEHelper.ShowError(iox.Message);
            }
            catch (Exception ex)
            {
                DataConnectionHelper.SendError(ex, menuInfo.DatabaseInfo.DatabaseType, false);
            }
        }
示例#11
0
        public void ReportTableData(object sender, ExecutedRoutedEventArgs e)
        {
            string sqlText  = null;
            var    menuItem = sender as MenuItem;
            var    ds       = new DataSet();

            if (menuItem == null)
            {
                return;
            }
            var menuInfo = menuItem.CommandParameter as MenuCommandParameters;

            if (menuInfo == null)
            {
                return;
            }
            try
            {
                using (IRepository repository = Helpers.DataConnectionHelper.CreateRepository(menuInfo.DatabaseInfo))
                {
                    sqlText = string.Format(Environment.NewLine + "SELECT * FROM [{0}]", menuInfo.Name)
                              + Environment.NewLine + "GO";
                    ds = repository.ExecuteSql(sqlText);
                }
                var pkg = ParentWindow.Package as SqlCeToolboxPackage;
                Debug.Assert(pkg != null, "Package property of the Explorere Tool Window should never be null, have you tried to create it manually and not through FindToolWindow()?");

                string dbName = System.IO.Path.GetFileNameWithoutExtension(menuInfo.DatabaseInfo.Caption);
                var    window = pkg.CreateWindow <ReportWindow>(Math.Abs(menuInfo.Name.GetHashCode() - dbName.GetHashCode()));
                window.Caption = menuInfo.Name + " (" + dbName + ")";
                pkg.ShowWindow(window);

                var control = window.Content as ReportControl;
                control.DatabaseInfo = menuInfo.DatabaseInfo;
                control.TableName    = menuInfo.Name;
                control.DataSet      = ds;
                control.ShowReport();
                DataConnectionHelper.LogUsage("ViewReport");
            }
            catch (System.IO.FileNotFoundException)
            {
                EnvDTEHelper.ShowError("Microsoft Report Viewer 2010 not installed, please download and install to use this feature  http://www.microsoft.com/en-us/download/details.aspx?id=6442");
                return;
            }
            catch (Exception ex)
            {
                DataConnectionHelper.SendError(ex, menuInfo.DatabaseInfo.DatabaseType, false);
            }
            ds.Dispose();
        }
示例#12
0
        private bool TryGetInitialPath(SqlCeToolboxPackage package, out string path)
        {
            var          dte       = package.GetServiceHelper(typeof(EnvDTE.DTE)) as EnvDTE.DTE;
            EnvDTEHelper dteHelper = new EnvDTEHelper();

            try
            {
                path = dteHelper.GetInitialFolder(dte);
                return(true);
            }
            catch
            {
                path = null;
                return(false);
            }
        }
示例#13
0
 private void TryLaunchSqlplan(string showPlan)
 {
     if (!string.IsNullOrWhiteSpace(showPlan))
     {
         if (DatabaseInfo.DatabaseType == DatabaseType.SQLite)
         {
             var textBox = new TextBox();
             textBox.FontFamily = fontFamiliy;
             textBox.FontSize   = fontSize;
             textBox.Text       = showPlan;
             ClearResults();
             this.Resultspanel.Children.Add(textBox);
             this.tab1.Visibility            = System.Windows.Visibility.Collapsed;
             resultsTabControl.SelectedIndex = 1;
         }
         else
         {
             var fileName = System.IO.Path.GetTempFileName();
             fileName = fileName + ".sqlplan";
             System.IO.File.WriteAllText(fileName, showPlan);
             // If Data Dude is available
             var pkg = _parentWindow.Package as SqlCeToolboxPackage;
             if (pkg.VSSupportsSqlPlan())
             {
                 dte.ItemOperations.OpenFile(fileName);
                 dte.ActiveDocument.Activate();
             }
             else
             {
                 // Just try to start SSMS
                 using (RegistryKey rkRoot = Registry.ClassesRoot)
                 {
                     RegistryKey rkFileType = rkRoot.OpenSubKey(".sqlplan");
                     if (rkFileType != null)
                     {
                         System.Diagnostics.Process.Start(fileName);
                     }
                     else
                     {
                         EnvDTEHelper.ShowError("No application that can open .sqlplan files is installed, you could install SSMS 2012 SP1 Express");
                     }
                 }
             }
         }
     }
 }
示例#14
0
        public void CheckCeVersion(object sender, ExecutedRoutedEventArgs e)
        {
            var            helper = Helpers.DataConnectionHelper.CreateEngineHelper(DatabaseType.SQLCE40);
            OpenFileDialog ofd    = new OpenFileDialog();

            ofd.Filter          = DataConnectionHelper.GetSqlCeFileFilter();
            ofd.CheckFileExists = true;
            ofd.Multiselect     = false;
            ofd.ValidateNames   = true;
            if (ofd.ShowDialog() == true)
            {
                try
                {
                    var    sdfVersion = helper.DetermineVersion(ofd.FileName);
                    string found      = "Unknown";
                    switch (sdfVersion)
                    {
                    case SQLCEVersion.SQLCE20:
                        found = "2.0";
                        break;

                    case SQLCEVersion.SQLCE30:
                        found = "3.0/3.1";
                        break;

                    case SQLCEVersion.SQLCE35:
                        found = "3.5";
                        break;

                    case SQLCEVersion.SQLCE40:
                        found = "4.0";
                        break;

                    default:
                        break;
                    }
                    EnvDTEHelper.ShowMessage(string.Format("{0} is SQL Server Compact version {1}", Path.GetFileName(ofd.FileName), found));
                    Helpers.DataConnectionHelper.LogUsage("DatabaseVersionDetect");
                }
                catch (Exception ex)
                {
                    EnvDTEHelper.ShowError(ex.Message);
                }
            }
        }
示例#15
0
        public void ModifyColumn(object sender, ExecutedRoutedEventArgs e)
        {
            var menuItem = sender as MenuItem;

            if (menuItem == null)
            {
                return;
            }
            var menuInfo = menuItem.CommandParameter as MenuCommandParameters;

            if (menuInfo == null)
            {
                return;
            }
            try
            {
                using (IRepository repository = Helpers.DataConnectionHelper.CreateRepository(menuInfo.DatabaseInfo))
                {
                    var           generator = Helpers.DataConnectionHelper.CreateGenerator(repository, menuInfo.DatabaseInfo.DatabaseType);
                    List <Column> columns   = repository.GetAllColumns();
                    var           col       = columns.SingleOrDefault(c => c.TableName == menuInfo.Description && c.ColumnName == menuInfo.Name);
                    if (col == null)
                    {
                        EnvDTEHelper.ShowError("Could not find the column in the table, has it been dropped?");
                        return;
                    }
                    TableBuilderDialog tbd = new TableBuilderDialog(menuInfo.Description, menuInfo.DatabaseInfo.DatabaseType);
                    tbd.TableColumns = new List <Column> {
                        col
                    };
                    tbd.Mode = 2;
                    if (tbd.ShowModal() == true && tbd.TableColumns.Count == 1)
                    {
                        generator.GenerateColumnAlterScript(tbd.TableColumns[0]);
                        var script = generator.GeneratedScript.ToString();
                        OpenSqlEditorToolWindow(menuInfo, script);
                        Helpers.DataConnectionHelper.LogUsage("TableBuildColumnEdit");
                    }
                }
            }
            catch (Exception ex)
            {
                Helpers.DataConnectionHelper.SendError(ex, menuInfo.DatabaseInfo.DatabaseType);
            }
        }
        public sealed override void RunStarted(object automationObject, Dictionary <string, string> replacementsDictionary, WizardRunKind runKind, object[] customParams)
        {
            _dte              = (DTE2)automationObject;
            _currentProject   = EnvDTEHelper.GetCurrentProject();
            _project          = EnvDTEProject.From(_currentProject);
            _referenceService = new ProjectSystemReferenceService();
            _packageService   = new ProjectSystemPackageService();

            RootNamespace = replacementsDictionary["$rootnamespace$"];
            RootName      = replacementsDictionary["$rootname$"];

            if (RootName.Contains("."))
            {
                RootName = Path.GetFileNameWithoutExtension(RootName);
            }

            RunStartedCore(replacementsDictionary);
        }
示例#17
0
 private void SaveButton_Click(object sender, RoutedEventArgs e)
 {
     if (cmbColumns.SelectedIndex == -1)
     {
         EnvDTEHelper.ShowError("Please select a column");
         return;
     }
     if (string.IsNullOrEmpty(dataSourceTextBox.Text))
     {
         EnvDTEHelper.ShowError("Please enter an index name");
         return;
     }
     newIndex.IndexName  = dataSourceTextBox.Text;
     newIndex.ColumnName = cmbColumns.SelectedItem.ToString();
     newIndex.TableName  = _tableName;
     newIndex.Unique     = chkUnique.IsChecked.Value;
     this.DialogResult   = true;
     Close();
 }
示例#18
0
        public void ScriptAsCreate(object sender, ExecutedRoutedEventArgs e)
        {
            var menuItem = sender as MenuItem;

            if (menuItem == null)
            {
                return;
            }
            var menuInfo = menuItem.CommandParameter as MenuCommandParameters;

            if (menuInfo == null)
            {
                return;
            }
            try
            {
                using (IRepository repository = Helpers.DataConnectionHelper.CreateRepository(menuInfo.DatabaseInfo))
                {
                    var           generator = Helpers.DataConnectionHelper.CreateGenerator(repository, menuInfo.DatabaseInfo.DatabaseType);
                    List <Column> columns   = repository.GetAllColumns();
                    var           col       = columns.SingleOrDefault(c => c.TableName == menuInfo.Description && c.ColumnName == menuInfo.Name);
                    if (col == null)
                    {
                        EnvDTEHelper.ShowError("Could not find the column in the table, has it been dropped?");
                        return;
                    }
                    else
                    {
                        generator.GenerateColumnAddScript(col);
                    }
                    OpenSqlEditorToolWindow(menuInfo, generator.GeneratedScript);
                    Helpers.DataConnectionHelper.LogUsage("ColumnScriptAsCreate");
                }
            }
            catch (Exception ex)
            {
                Helpers.DataConnectionHelper.SendError(ex, menuInfo.DatabaseInfo.DatabaseType, false);
            }
        }
示例#19
0
 protected override void GenerateProject(IGenerator generator, Type projectGeneratorType)
 {
     try
     {
         var projectGenerator = GetProjectGenerator(projectGeneratorType);
         projectGenerator.Initialize(generator.Model);
         if (!EnvDTEHelper.ProjectExists(projectGenerator.ProjectName))
         {
             CreateProject(generator, projectGeneratorType, string.Empty);
         }
         else if (!EnvDTEHelper.ProjectLoaded(projectGenerator.ProjectName))
         {
             //LoadProject(generator, projectGeneratorType);
             _errorList.Add($"The project '{projectGenerator.ProjectName}' is unloaded and cannot be generated.");
             return;
         }
         GenerateProjectItems(projectGenerator);
     }
     catch (Exception ex)
     {
         throw;
     }
 }
        private void SaveButton_Click(object sender, RoutedEventArgs e)
        {
            if (string.IsNullOrEmpty(dataSourceTextBox.Text))
            {
                EnvDTEHelper.ShowError("Please enter a foreign key name");
                return;
            }
            if (cmbFkColumn.SelectedIndex == -1)
            {
                EnvDTEHelper.ShowError("Please select a foreign key column");
                return;
            }
            if (cmbPrimaryKeyTableAndColumn.SelectedIndex == -1)
            {
                EnvDTEHelper.ShowError("Please select a primary key");
                return;
            }
            newKey.ColumnName = cmbFkColumn.SelectedItem.ToString();
            newKey.Columns    = new ColumnList {
                cmbFkColumn.SelectedItem.ToString()
            };
            newKey.ConstraintName      = dataSourceTextBox.Text;
            newKey.ConstraintTableName = _tableName;
            newKey.DeleteRule          = cmbDeleteAction.SelectedItem.ToString();
            newKey.UpdateRule          = cmbUpdateAction.SelectedItem.ToString();

            PrimaryKey pk = (PrimaryKey)cmbPrimaryKeyTableAndColumn.SelectedValue;

            newKey.UniqueColumns = new ColumnList {
                pk.ColumnName
            };
            newKey.UniqueConstraintTableName = pk.TableName;

            this.DialogResult = true;
            Close();
        }
示例#21
0
 private void GenerateProject(IGenerator generator, Type projectGeneratorType)
 {
     try
     {
         var projectGenerator = GetProjectGenerator(projectGeneratorType);
         projectGenerator.Initialize(generator.Model);
         if (!EnvDTEHelper.ProjectExists(projectGenerator.ProjectName))
         {
             CreateProject(generator, projectGeneratorType);
         }
         else if (!EnvDTEHelper.ProjectLoaded(projectGenerator.ProjectName))
         {
             //LoadProject(generator, projectGeneratorType);
             //throw new Exception("The project '" + projectGenerator.ProjectName + "' is unloaded and cannot be generated.");
             _errorList.Add("The project '" + projectGenerator.ProjectName + "' is unloaded and cannot be generated.");
             return;
         }
         GenerateProjectItems(projectGenerator);
     }
     catch (Exception ex)
     {
         throw;
     }
 }
        private void TestConnection(bool showMessage)
        {
            if (string.IsNullOrWhiteSpace(builder.DataSource))
            {
                return;
            }
            try
            {
                if (createDb)
                {
                    if (!System.IO.File.Exists(builder.DataSource))
                    {
                        var engineHelper = Helpers.DataConnectionHelper.CreateEngineHelper(DatabaseType.SQLite);
                        engineHelper.CreateDatabase(builder.ConnectionString);
                    }
                }

                using (var conn = new SQLiteConnection(builder.ConnectionString))
                {
                    conn.Open();
                    this.ConnectionString = builder.ConnectionString;
                    if (showMessage)
                    {
                        EnvDTEHelper.ShowMessage("Test succeeded!");
                    }
                    else
                    {
                        this.DialogResult = true;
                    }
                }
            }
            catch (Exception ex)
            {
                Helpers.DataConnectionHelper.SendError(ex, DatabaseType.SQLite, false);
            }
        }
示例#23
0
        public void EditTableData(object sender, ExecutedRoutedEventArgs e)
        {
            string sqlText = null;

            var menuInfo = ValidateMenuInfo(sender);

            if (menuInfo == null)
            {
                return;
            }
            bool dbProviderPresent = menuInfo.DatabaseInfo.DatabaseType == DatabaseType.SQLCE35 && Helpers.DataConnectionHelper.IsV35DbProviderInstalled();

            if (menuInfo.DatabaseInfo.DatabaseType == DatabaseType.SQLCE40 && Helpers.DataConnectionHelper.IsV40DbProviderInstalled())
            {
                dbProviderPresent = true;
            }
            if (menuInfo.DatabaseInfo.DatabaseType == DatabaseType.SQLite)
            {
                dbProviderPresent = true;
            }
            if (!dbProviderPresent)
            {
                EnvDTEHelper.ShowError("The required DbProvider registration is not present, please re-install/repair the SQL Server Compact runtime");
                return;
            }

            try
            {
                bool       readOnly        = false;
                List <int> readOnlyColumns = new List <int>();

                using (IRepository repository = Helpers.DataConnectionHelper.CreateRepository(menuInfo.DatabaseInfo))
                {
                    List <PrimaryKey> pks = repository.GetAllPrimaryKeys();
                    var tpks = repository.GetAllPrimaryKeys().Where(pk => pk.TableName == menuInfo.Name).ToList();
                    if (tpks.Count == 0)
                    {
                        readOnly = true;
                    }
                    List <Column> cols = repository.GetAllColumns();
                    cols = cols.Where(c => c.TableName == menuInfo.Name).ToList();
                    int x = 0;
                    foreach (Column col in cols)
                    {
                        if (col.AutoIncrementBy > 0 || col.RowGuidCol)
                        {
                            readOnlyColumns.Add(x);
                        }
                        x++;
                    }
                    var generator = Helpers.DataConnectionHelper.CreateGenerator(repository, menuInfo.DatabaseInfo.DatabaseType);
                    generator.GenerateTableSelect(menuInfo.Name);
                    sqlText = generator.GeneratedScript.Replace(";" + Environment.NewLine + "GO", "");
                    sqlText = sqlText.Replace(";" + Environment.NewLine, "");
                    if (menuInfo.DatabaseInfo.DatabaseType == DatabaseType.SQLite)
                    {
                        sqlText = sqlText + string.Format(" LIMIT {0}", Properties.Settings.Default.MaxRowsToEdit);
                    }
                    else
                    {
                        sqlText = sqlText.Replace(Environment.NewLine + "SELECT ", string.Format(Environment.NewLine + "SELECT TOP({0}) ", Properties.Settings.Default.MaxRowsToEdit));
                    }
                }

                var pkg = ParentWindow.Package as SqlCeToolboxPackage;
                Debug.Assert(pkg != null, "Package property of the Explorere Tool Window should never be null, have you tried to create it manually and not through FindToolWindow()?");

                string dbName = System.IO.Path.GetFileNameWithoutExtension(menuInfo.DatabaseInfo.Caption);
                var    window = pkg.CreateWindow <DataGridViewWindow>(Math.Abs(menuInfo.Name.GetHashCode() - dbName.GetHashCode()));
                window.Caption = menuInfo.Name + " (" + dbName + ")";
                pkg.ShowWindow(window);

                var control = window.Content as DataEditControl;
                control.DatabaseInfo    = menuInfo.DatabaseInfo;
                control.TableName       = menuInfo.Name;
                control.ReadOnly        = readOnly;
                control.ReadOnlyColumns = readOnlyColumns;
                control.SqlText         = sqlText;
                control.ShowGrid();
                DataConnectionHelper.LogUsage("TableEdit");
            }
            catch (Exception ex)
            {
                DataConnectionHelper.SendError(ex, menuInfo.DatabaseInfo.DatabaseType, false);
            }
        }
示例#24
0
        public void SyncFxGenerateLocalDatabaseCacheCode(object sender, ExecutedRoutedEventArgs e)
        {
            // http://www.mztools.com/articles/2007/MZ2007011.aspx
            var menuItem = sender as MenuItem;

            if (menuItem == null)
            {
                return;
            }

            Scope scope = (Scope)menuItem.Tag;

            var dte = package.GetServiceHelper(typeof(EnvDTE.DTE)) as EnvDTE.DTE;

            var dteH = new Helpers.EnvDTEHelper();

            var project = dteH.GetProject(dte);

            if (project == null)
            {
                EnvDTEHelper.ShowError("Please select a project in Solution Explorer, where you want the SyncFx classes to be placed");
                return;
            }
            if (!dteH.AllowedProjectKinds.Contains(new Guid(project.Kind)))
            {
                EnvDTEHelper.ShowError("The selected project type does not support Sync Framework (please let me know if I am wrong)");
                return;
            }
            if (project.CodeModel.Language != CodeModelLanguageConstants.vsCMLanguageCSharp)
            {
                EnvDTEHelper.ShowError("Unsupported code language, only C# is currently supported");
                return;
            }
            if (project.Properties.Item("TargetFrameworkMoniker") == null)
            {
                EnvDTEHelper.ShowError("The selected project type does not support Sync Framework - missing TargetFrameworkMoniker");
                return;
            }
            if (!project.Properties.Item("TargetFrameworkMoniker").Value.ToString().Contains(".NETFramework"))
            {
                EnvDTEHelper.ShowError("The selected project type does not support .NET Desktop - wrong TargetFrameworkMoniker: " + project.Properties.Item("TargetFrameworkMoniker").Value.ToString());
                return;
            }

            try
            {
                string serverConnectionString = DataConnectionHelper.PromptForConnectionString(package);
                if (!string.IsNullOrEmpty(serverConnectionString))
                {
                    string clientConnectionString = string.Empty;

                    //grab target SQL CE Database
                    var dialog = new ConnectionDialog();
                    dialog.DbType = DatabaseType.SQLCE35;
                    bool?result = dialog.ShowModal();
                    if (result.HasValue && result.Value == true && !string.IsNullOrWhiteSpace(dialog.ConnectionString))
                    {
                        clientConnectionString = dialog.ConnectionString;
                    }
                    else
                    {
                        return;
                    }

                    string       model        = string.Empty;
                    SyncFxDialog sfd          = new SyncFxDialog();
                    int          totalCount   = 0;
                    var          databaseInfo = new DatabaseMenuCommandParameters
                    {
                        DatabaseInfo = new DatabaseInfo
                        {
                            ConnectionString = serverConnectionString,
                            DatabaseType     = DatabaseType.SQLServer
                        }
                    };
                    totalCount    = SyncFxGetObjectsForSync(sfd, databaseInfo);
                    sfd.ModelName = model;

                    bool?res = sfd.ShowModal();
                    if (res.HasValue && res.Value == true && (sfd.Tables.Count > 0) && !string.IsNullOrWhiteSpace(sfd.ModelName))
                    {
                        model = sfd.ModelName;
                        var defaultNamespace = project.Properties.Item("DefaultNamespace").Value.ToString();

                        var columns     = sfd.Columns.Where(c => sfd.Tables.Contains(c.TableName)).ToList();
                        var classes     = new SyncFxHelper().GenerateCodeForScope(serverConnectionString, clientConnectionString, "SQL", model, columns, defaultNamespace);
                        var projectPath = project.Properties.Item("FullPath").Value.ToString();

                        foreach (var item in classes)
                        {
                            string fileName = Path.Combine(projectPath, item.Key + ".cs");
                            if (File.Exists(fileName))
                            {
                                File.Delete(fileName);
                            }
                            File.WriteAllText(fileName, item.Value);
                            project.ProjectItems.AddFromFile(fileName);
                        }
                        //Adding references - http://blogs.msdn.com/b/murat/archive/2008/07/30/envdte-adding-a-refernce-to-a-project.aspx
                        EnvDTEHelper.AddReference(project, "System.Data.SqlServerCe, Version=3.5.1.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91");

                        EnvDTEHelper.AddReference(project, "Microsoft.Synchronization, Version=2.1.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91");
                        EnvDTEHelper.AddReference(project, "Microsoft.Synchronization.Data, Version=3.1.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91");
                        EnvDTEHelper.AddReference(project, "Microsoft.Synchronization.Data.SqlServer, Version=3.1.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91");
                        EnvDTEHelper.AddReference(project, "Microsoft.Synchronization.Data.SqlServerCe, Version=3.1.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91");
                        EnvDTEHelper.ShowMessage("Scope: " + model + " code generated.");
                        Helpers.DataConnectionHelper.LogUsage("DatabasesSyncAddLocalDBCache");
                    }
                }
            }
            catch (Exception ex)
            {
                Helpers.DataConnectionHelper.SendError(ex, DatabaseType.SQLServer);
            }
        }
示例#25
0
 public void DesignDatabase(object sender, ExecutedRoutedEventArgs e)
 {
     EnvDTEHelper.LaunchUrl("http://sqlcompact.dk/sqldesigner/");
 }
示例#26
0
        public void ScriptServerDatabase(object sender, ExecutedRoutedEventArgs e)
        {
            var menuItem = sender as MenuItem;

            if (menuItem == null)
            {
                return;
            }
            Scope scope        = (Scope)menuItem.Tag;
            var   databaseInfo = menuItem.CommandParameter as DatabaseMenuCommandParameters;

            if (databaseInfo == null)
            {
                return;
            }

            try
            {
                string connectionString = databaseInfo.DatabaseInfo != null
                    ? databaseInfo.DatabaseInfo.ConnectionString :
                                          DataConnectionHelper.PromptForConnectionString(package);
                if (!string.IsNullOrEmpty(connectionString))
                {
                    string           fileName;
                    PickTablesDialog ptd = new PickTablesDialog();
                    int totalCount       = 0;
                    using (IRepository repository = Helpers.DataConnectionHelper.CreateRepository(new DatabaseInfo {
                        ConnectionString = connectionString, DatabaseType = DatabaseType.SQLServer
                    }))
                    {
                        ptd.Tables = repository.GetAllTableNamesForExclusion();
                        totalCount = ptd.Tables.Count;
                    }

                    bool?res = ptd.ShowModal();
                    if (res.HasValue && res.Value == true && (ptd.Tables.Count < totalCount))
                    {
                        SaveFileDialog fd = new SaveFileDialog();
                        fd.Title  = "Save generated database script as";
                        fd.Filter = "SQL Server Compact Script (*.sqlce)|*.sqlce|SQL Server Script (*.sql)|*.sql|All Files(*.*)|*.*";
                        if (scope == Scope.SchemaDataSQLite || scope == Scope.SchemaSQLite)
                        {
                            fd.Filter = "SQL Script (*.sql)|*.sql|All Files(*.*)|*.*";
                        }
                        fd.OverwritePrompt = true;
                        fd.ValidateNames   = true;
                        bool?result = fd.ShowDialog();
                        if (result.HasValue && result.Value == true)
                        {
                            fileName = fd.FileName;
                            using (IRepository repository = Helpers.DataConnectionHelper.CreateRepository(new DatabaseInfo {
                                ConnectionString = connectionString, DatabaseType = DatabaseType.SQLServer
                            }))
                            {
                                try
                                {
                                    var generator = Helpers.DataConnectionHelper.CreateGenerator(repository, fd.FileName, DatabaseType.SQLServer);
                                    generator.ExcludeTables(ptd.Tables);
                                    EnvDTEHelper.ShowMessage(generator.ScriptDatabaseToFile(scope));
                                    Helpers.DataConnectionHelper.LogUsage("DatabasesScriptServer");
                                }
                                catch (Exception ex)
                                {
                                    Helpers.DataConnectionHelper.SendError(ex, DatabaseType.SQLServer, false);
                                }
                            }
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                Helpers.DataConnectionHelper.SendError(ex, DatabaseType.SQLServer, false);
            }
        }
 private bool TestConnection(bool showMessage)
 {
     try
     {
         if (_createDb)
         {
             if (!System.IO.File.Exists(dataSourceTextBox.Text))
             {
                 var engineHelper = DataConnectionHelper.CreateEngineHelper(DbType);
                 engineHelper.CreateDatabase(_connectionString);
             }
         }
         using (DataConnectionHelper.CreateRepository(new DatabaseInfo {
             ConnectionString = _connectionString, DatabaseType = DbType
         }))
         {
             if (showMessage)
             {
                 EnvDTEHelper.ShowMessage("Connection OK!");
             }
             else
             {
                 DialogResult = true;
             }
         }
         return(true);
     }
     catch (Exception ex)
     {
         if (ex.Message.Contains("Please upgrade using SqlCeEngine.Upgrade() method") && DbType == DatabaseType.SQLCE40)
         {
             if (EnvDTEHelper.ShowMessageBox("This database file is from an earlier version,\n\rwould you like to Upgrade it?\n\r(A copy of the original file will be named .bak)"
                                             , Microsoft.VisualStudio.Shell.Interop.OLEMSGBUTTON.OLEMSGBUTTON_YESNO
                                             , Microsoft.VisualStudio.Shell.Interop.OLEMSGDEFBUTTON.OLEMSGDEFBUTTON_SECOND
                                             , Microsoft.VisualStudio.Shell.Interop.OLEMSGICON.OLEMSGICON_WARNING) == System.Windows.Forms.DialogResult.Yes)
             {
                 var bakFile = dataSourceTextBox.Text + ".bak";
                 var go      = true;
                 try
                 {
                     if (System.IO.File.Exists(bakFile))
                     {
                         if (EnvDTEHelper.ShowMessageBox(string.Format("{0} already exists, do you wish to overwrite it?", bakFile)
                                                         , Microsoft.VisualStudio.Shell.Interop.OLEMSGBUTTON.OLEMSGBUTTON_YESNO
                                                         , Microsoft.VisualStudio.Shell.Interop.OLEMSGDEFBUTTON.OLEMSGDEFBUTTON_SECOND
                                                         , Microsoft.VisualStudio.Shell.Interop.OLEMSGICON.OLEMSGICON_WARNING) == System.Windows.Forms.DialogResult.Yes)
                         {
                             System.IO.File.Delete(bakFile);
                         }
                         else
                         {
                             go = false;
                         }
                     }
                     if (go)
                     {
                         System.IO.File.Copy(dataSourceTextBox.Text, dataSourceTextBox.Text + ".bak");
                         var helper = new SqlCeScripting.SqlCeHelper4();
                         helper.UpgradeTo40(_connectionString);
                         DialogResult = true;
                     }
                 }
                 catch (Exception ex2)
                 {
                     DataConnectionHelper.SendError(ex2, DbType, false);
                     return(false);
                 }
             }
         }
         else
         {
             DataConnectionHelper.SendError(ex, DbType, false);
             return(false);
         }
     }
     return(true);
 }
示例#28
0
 private void DDEXButton_Click(object sender, RoutedEventArgs e)
 {
     Helpers.DataConnectionHelper.RegisterDDEXProviders(true);
     EnvDTEHelper.ShowMessage("Providers registered, you may have to restart Visual Studio");
 }
示例#29
0
        private void projectItemGenerator_ProjectItemGenerated(object sender, ProjectItemGeneratedEventArgs e)
        {
            //.NET is a single-threaded application so we much release to let the UI refresh sometimes.
            if (_doEventCount % 10 == 0)
            {
                Application.DoEvents();
            }
            _doEventCount++;

            try
            {
                const string solutionDirReplaceText = "$(solutiondir)";
                if (e.FullName != null && e.FullName.ToLower().Contains(solutionDirReplaceText))
                {
                    var ti = e.FullName.ToLower().IndexOf(solutionDirReplaceText);
                    e.FullName = e.FullName.Remove(ti, solutionDirReplaceText.Length).Insert(ti, EnvDTEHelper.Instance.SolutionDirectory.FullName);
                }
                if (e.ProjectItemName != null && e.ProjectItemName.ToLower().Contains(solutionDirReplaceText))
                {
                    var ti = e.ProjectItemName.ToLower().IndexOf(solutionDirReplaceText);
                    e.ProjectItemName = e.ProjectItemName.Remove(ti, solutionDirReplaceText.Length).Insert(ti, EnvDTEHelper.Instance.SolutionDirectory.FullName);
                }

                //Get the parent project if one exists
                Project     project = null;
                ProjectItem parent  = null;
                if (!string.IsNullOrEmpty(e.ProjectName))
                {
                    if (projectCache.ContainsKey(e.ProjectName))
                    {
                        var p = projectCache[e.ProjectName];
                        //Test this COM object to ensure it has not expired.
                        //If error, do nothing and the project will be requeried
                        try
                        {
                            var s = p.Name;
                            project = p;
                        }
                        catch (Exception)
                        {
                            //Do Nothing
                            projectCache.Remove(e.ProjectName);
                        }
                    }

                    var fromCache = true;
                    if (project == null)
                    {
                        fromCache = false;
                        project   = EnvDTEHelper.Instance.GetProject(e.ProjectName);
                        projectCache.Add(e.ProjectName, project);
                    }

                    parent = EnvDTEHelper.Instance.GetProjectItem(e.ProjectName, e.ParentItemName, e.ParentItemType);

                    //This should not happen. If do dump the cache project and requery
                    if (parent == null && fromCache)
                    {
                        if (projectCache.ContainsKey(e.ProjectName))
                        {
                            projectCache.Remove(e.ProjectName);
                        }
                        project = EnvDTEHelper.Instance.GetProject(e.ProjectName);
                        projectCache.Add(e.ProjectName, project);
                        parent = EnvDTEHelper.Instance.GetProjectItem(e.ProjectName, e.ParentItemName, e.ParentItemType);
                    }
                }

                var         fileStateInfo = new FileStateInfo();
                ProjectItem projectItem   = null;
                if (e.ParentItemName != string.Empty)
                {
                    if (e.ContentType == ProjectItemContentType.String)
                    {
                        projectItem = EnvDTEHelper.Instance.AddProjectItem(project, parent, e.ProjectItemName, e.ProjectItemContent, e.Overwrite, out fileStateInfo);
                    }
                    else
                    {
                        projectItem = EnvDTEHelper.Instance.AddProjectItem(parent, e.ProjectItemContent, out fileStateInfo);
                    }

                    if (fileStateInfo.FileState == EnvDTEHelper.FileStateConstants.Success)
                    {
                        EnvDTEHelper.SetProperties(projectItem, e.Properties);
                    }
                }
                else
                {
                    if (e.ContentType == ProjectItemContentType.String || e.ContentType == ProjectItemContentType.Binary)
                    {
                        if (project == null)
                        {
                            EnvDTEHelper.Instance.AddProjectItem(e.ProjectItemContent, e.ProjectItemBinaryContent, e.ContentType, e.ProjectItemName, e.Overwrite, out fileStateInfo);
                        }
                        else
                        {
                            projectItem = EnvDTEHelper.Instance.AddProjectItem(project, e.ProjectItemContent, e.ProjectItemBinaryContent, e.ContentType, e.ProjectItemName, e.Overwrite, out fileStateInfo);
                        }
                    }
                    else
                    {
                        projectItem = EnvDTEHelper.Instance.AddFileAsProjectItem(project, e.ProjectItemContent, e.ProjectItemName, e.Overwrite, out fileStateInfo);
                    }

                    if (fileStateInfo.FileState == EnvDTEHelper.FileStateConstants.Success)
                    {
                        EnvDTEHelper.SetProperties(projectItem, e.Properties);
                    }
                }

                //TEMP
                processedFiles.Add(fileStateInfo.FileName);
                //TEMP

                //Custom Tool Functionality
                if (e.RunCustomTool && projectItem != null)
                {
                    if (!string.IsNullOrEmpty(e.CustomToolName))
                    {
                        EnvDTEHelper.SetProperty(projectItem, "Generator", e.CustomToolName);
                        EnvDTEHelper.SetProperty(projectItem, "CustomTool", e.CustomToolName);
                    }

                    //Try to run the custom tool
                    try
                    {
                        var vsProjectItem = projectItem.Object as VSLangProj.VSProjectItem;
                        if (vsProjectItem != null)
                        {
                            vsProjectItem.RunCustomTool();
                        }
                    }
                    catch
                    {
                        //Do Nothing
                    }
                }

                #region Compute CRC
                //System.IO.StreamReader sr = System.IO.File.OpenText("");
                //nHydrate.Generator.Common.Util.CRC32HashAlgorithm hash = new CRC32HashAlgorithm();
                //byte[] arr = hash.ComputeHash(sr.BaseStream);
                //sr.Close();
                //XmlHelper.AddAttribute(newfileNode, "crc", "0");
                #endregion

                if (fileStateInfo.FileName == string.Empty)
                {
                    System.Diagnostics.Debug.Write(string.Empty);
                }
                if (fileStateInfo.FileState == EnvDTEHelper.FileStateConstants.Failed)
                {
                    System.Diagnostics.Debug.Write(string.Empty);
                }

                //Write Log
                nHydrateLog.LogInfo("Project Item Generated: {0}", e.ProjectItemName);
                e.FileState = fileStateInfo.FileState;
                e.FullName  = fileStateInfo.FileName;
                this.OnProjectItemGenerated(sender, e);
            }
            catch (Exception ex)
            {
                this.OnProjectItemGeneratedError(this, e);
                nHydrateLog.LogWarning(ex);
            }
        }
示例#30
0
        public void GenerateDataDiffScript(object sender, ExecutedRoutedEventArgs e)
        {
            try
            {
                var menuInfo = ValidateMenuInfo(sender);
                var package  = ParentWindow.Package as SqlCeToolboxPackage;

                if (menuInfo == null)
                {
                    return;
                }

                Dictionary <string, DatabaseInfo> databaseList = Helpers.DataConnectionHelper.GetDataConnections(package, true, false);
                foreach (KeyValuePair <string, DatabaseInfo> info in Helpers.DataConnectionHelper.GetOwnDataConnections())
                {
                    if (!databaseList.ContainsKey(info.Key))
                    {
                        databaseList.Add(info.Key, info.Value);
                    }
                }
                foreach (KeyValuePair <string, DatabaseInfo> info in databaseList)
                {
                    string sourceType = string.Empty;
                    switch (info.Value.DatabaseType)
                    {
                    case DatabaseType.SQLCE35:
                        sourceType = "3.5";
                        break;

                    case DatabaseType.SQLCE40:
                        sourceType = "4.0";
                        break;

                    case DatabaseType.SQLServer:
                        sourceType = "Server";
                        break;
                    }
                    info.Value.Caption = string.Format("{0} ({1})", info.Value.Caption, sourceType);
                }

                CompareDialog cd = new CompareDialog(menuInfo.DatabaseInfo.Caption, databaseList, menuInfo.Name);

                bool?result = cd.ShowModal();
                if (result.HasValue && result.Value == true && (cd.TargetDatabase.Key != null))
                {
                    var target       = cd.TargetDatabase;
                    var source       = new KeyValuePair <string, DatabaseInfo>(menuInfo.DatabaseInfo.ConnectionString, menuInfo.DatabaseInfo);
                    var editorTarget = target;
                    if (editorTarget.Value.DatabaseType == DatabaseType.SQLServer)
                    {
                        editorTarget = source;
                    }

                    using (IRepository sourceRepository = Helpers.DataConnectionHelper.CreateRepository(source.Value))
                    {
                        using (IRepository targetRepository = Helpers.DataConnectionHelper.CreateRepository(target.Value))
                        {
                            var generator = Helpers.DataConnectionHelper.CreateGenerator(targetRepository, target.Value.DatabaseType);
                            try
                            {
                                var script = SqlCeDiff.CreateDataDiffScript(sourceRepository, menuInfo.Name, targetRepository, menuInfo.Name, generator);

                                var sqlEditorWindow = package.CreateWindow <SqlEditorWindow>();
                                var editorControl   = sqlEditorWindow.Content as SqlEditorControl;
                                editorControl.ExplorerControl = ParentWindow.Content as ExplorerControl;
                                Debug.Assert(editorControl != null);
                                editorControl.DatabaseInfo = editorTarget.Value;
                                editorControl.SqlText      = script;
                                Helpers.DataConnectionHelper.LogUsage("TableScriptDataDiff");
                            }
                            catch (Exception ex)
                            {
                                Helpers.DataConnectionHelper.SendError(ex, source.Value.DatabaseType, false);
                            }
                        }
                    }
                }
            }
            catch (ArgumentException ae)
            {
                EnvDTEHelper.ShowError(ae.Message);
            }
            catch (Exception ex)
            {
                Helpers.DataConnectionHelper.SendError(ex, DatabaseType.SQLCE35, false);
            }
        }