public void GenerateServerDgmlFiles()
        {
            ThreadHelper.ThrowIfNotOnUIThread();

            EnvDteHelper.ShowError("This feature is no longer supported, install SQLite Toolbox to get it back.");
            return;
        }
        private List <TableInformationModel> GetTablesFromRepository(DatabaseInfo dbInfo)
        {
            if (dbInfo.DatabaseType == DatabaseType.Npgsql)
            {
                return(EnvDteHelper.GetNpgsqlTableNames(dbInfo.ConnectionString));
            }

            if (dbInfo.DatabaseType == DatabaseType.Mysql)
            {
                return(EnvDteHelper.GetMysqlTableNames(dbInfo.ConnectionString));
            }

            using (var repository = RepositoryHelper.CreateRepository(dbInfo))
            {
                var allPks    = repository.GetAllPrimaryKeys();
                var tableList = repository.GetAllTableNamesForExclusion();
                var tables    = new List <TableInformationModel>();

                foreach (var table in tableList)
                {
                    var hasPrimaryKey = allPks.Any(m => m.TableName == table);
                    tables.Add(new TableInformationModel(table, hasPrimaryKey));
                }
                return(tables);
            }
        }
示例#3
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);
            }
        }
 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");
     }
 }
        private void SaveOptions(Project project, string optionsPath, ReverseEngineerOptions options, Tuple <List <Schema>, string> renamingOptions)
        {
            ThreadHelper.ThrowIfNotOnUIThread();

            if (File.Exists(optionsPath) && File.GetAttributes(optionsPath).HasFlag(FileAttributes.ReadOnly))
            {
                EnvDteHelper.ShowError($"Unable to save options, the file is readonly: {optionsPath}");
                return;
            }

            if (!File.Exists(optionsPath + ".ignore"))
            {
                File.WriteAllText(optionsPath, options.Write(), Encoding.UTF8);
                project.ProjectItems.AddFromFile(optionsPath);
            }

            if (renamingOptions.Item1 != null && !File.Exists(renamingOptions.Item2 + ".ignore") && renamingOptions.Item1.Count() > 0)
            {
                if (File.Exists(renamingOptions.Item2) && File.GetAttributes(renamingOptions.Item2).HasFlag(FileAttributes.ReadOnly))
                {
                    EnvDteHelper.ShowError($"Unable to save renaming options, the file is readonly: {renamingOptions.Item2}");
                    return;
                }

                File.WriteAllText(renamingOptions.Item2, CustomNameOptionsExtensions.Write(renamingOptions.Item1), Encoding.UTF8);
                project.ProjectItems.AddFromFile(renamingOptions.Item2);
            }
        }
        private void AddButton_OnClick(object sender, RoutedEventArgs e)
        {
            try
            {
                var info = EnvDteHelper.PromptForInfo(_package);
                if (info.DatabaseType == DatabaseType.SQLCE35)
                {
                    return;
                }

                var databaseList = EnvDteHelper.GetDataConnections(_package);
                comboBox1.DisplayMemberPath = "Value.Caption";
                comboBox1.ItemsSource       = databaseList;

                int i = 0;
                foreach (var item in databaseList)
                {
                    if (item.Key == info.ConnectionString)
                    {
                        comboBox1.SelectedIndex = i;
                    }
                    i++;
                }
            }

            catch (Exception exception)
            {
                EnvDteHelper.ShowMessage(exception.ToString());
            }
        }
        public async System.Threading.Tasks.Task ManageMigrationsAsync(string outputPath, Project project)
        {
            try
            {
                if (string.IsNullOrEmpty(outputPath))
                {
                    throw new ArgumentException(outputPath, nameof(outputPath));
                }

                if (project == null)
                {
                    throw new ArgumentNullException(nameof(project));
                }

                if (project.Properties.Item("TargetFrameworkMoniker") == null)
                {
                    EnvDteHelper.ShowError("The selected project type has no TargetFrameworkMoniker");
                    return;
                }

                if (!project.IsNetCore30OrHigher())
                {
                    EnvDteHelper.ShowError("Only .NET Core 3.0+ projects are supported - TargetFrameworkMoniker: " + project.Properties.Item("TargetFrameworkMoniker").Value);
                    return;
                }

                var outputFolder = Path.GetDirectoryName(outputPath);

                var result = await project.ContainsEfCoreDesignReferenceAsync();

                if (string.IsNullOrEmpty(result.Item2))
                {
                    EnvDteHelper.ShowError("EF Core 3.1 or later not found in project");
                    return;
                }

                if (!result.Item1)
                {
                    if (!Version.TryParse(result.Item2, out Version version))
                    {
                        EnvDteHelper.ShowError($"Cannot support version {version}, notice that previews are not supported.");
                        return;
                    }
                    var nugetHelper = new NuGetHelper();
                    nugetHelper.InstallPackage("Microsoft.EntityFrameworkCore.Design", project, version);
                    EnvDteHelper.ShowError($"Installing EFCore.Design version {version}, please retry the command");
                    return;
                }

                var migrationsDialog = _package.GetView <IMigrationOptionsDialog>();
                migrationsDialog.UseProjectForMigration(project)
                .UseOutputPath(outputPath);

                migrationsDialog.ShowAndAwaitUserResponse(true);
            }
            catch (Exception exception)
            {
                _package.LogError(new List <string>(), exception);
            }
        }
        public void AddCe40Database(object sender, ExecutedRoutedEventArgs e)
        {
            // http://www.mztools.com/articles/2007/MZ2007011.aspx
            if (!DataConnectionHelper.DdexProviderIsInstalled(new Guid(Resources.SqlCompact40Provider)))
            {
                EnvDteHelper.ShowError("The version 4.0 Visual Studio DDEX provider is not installed, cannot add connection");
                return;
            }
            try
            {
                var objIVsDataConnectionDialogFactory = _package.GetServiceHelper(typeof(IVsDataConnectionDialogFactory)) as IVsDataConnectionDialogFactory;
                if (objIVsDataConnectionDialogFactory != null)
                {
                    var objIVsDataConnectionDialog = objIVsDataConnectionDialogFactory.CreateConnectionDialog();
                    objIVsDataConnectionDialog.AddAllSources();
                    objIVsDataConnectionDialog.SelectedSource   = new Guid("34A4B3E8-C54D-466F-92EA-E5814B97CA43");
                    objIVsDataConnectionDialog.SelectedProvider = new Guid(Resources.SqlCompact40Provider);

                    if (objIVsDataConnectionDialog.ShowDialog() && objIVsDataConnectionDialog.SelectedProvider == new Guid(Resources.SqlCompact40Provider))
                    {
                        DataConnectionHelper.SaveDataConnection(_package, objIVsDataConnectionDialog.EncryptedConnectionString, objIVsDataConnectionDialog.DisplayConnectionString, DatabaseType.SQLCE40, new Guid(Resources.SqlCompact40Provider));
                        var control = _parentWindow.Content as ExplorerControl;
                        control?.BuildDatabaseTree();
                        DataConnectionHelper.LogUsage("DatabasesAddCe40Database");
                    }
                    objIVsDataConnectionDialog.Dispose();
                }
            }
            catch (Exception ex)
            {
                DataConnectionHelper.SendError(ex, DatabaseType.SQLCE40, false);
            }
        }
        private bool SaveSettings()
        {
            try
            {
                TableName = 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);
                PkScript     = _dbType == DatabaseType.SQLite ? BuildSqLitePkScript(_columns.ToList(), TableName) : TableColumn.BuildPkScript(_columns.ToList(), TableName);
                return(true);
            }
            catch (Exception ex)
            {
                DataConnectionHelper.SendError(ex, DatabaseType.SQLServer);
            }
            return(false);
        }
示例#10
0
        private DatabaseConnectionModel GetDatabaseInfo(ReverseEngineerOptions options)
        {
            ThreadHelper.ThrowIfNotOnUIThread();

            var dbInfo = new DatabaseConnectionModel();

            if (!string.IsNullOrEmpty(options.ConnectionString))
            {
                dbInfo.ConnectionString = options.ConnectionString;
                dbInfo.DatabaseType     = options.DatabaseType;
            }

            if (!string.IsNullOrEmpty(options.Dacpac))
            {
                dbInfo.DatabaseType      = DatabaseType.SQLServerDacpac;
                dbInfo.ConnectionString  = $"Data Source=(local);Initial Catalog={Path.GetFileNameWithoutExtension(options.Dacpac)};Integrated Security=true;";
                options.ConnectionString = dbInfo.ConnectionString;
                options.DatabaseType     = dbInfo.DatabaseType;

                options.Dacpac = _package.Dte2.DTE.BuildSqlProj(options.Dacpac);
                if (string.IsNullOrEmpty(options.Dacpac))
                {
                    EnvDteHelper.ShowMessage(ReverseEngineerLocale.UnableToBuildSelectedDatabaseProject);
                    return(null);
                }
            }

            if (dbInfo.DatabaseType == DatabaseType.Undefined)
            {
                EnvDteHelper.ShowError($"{ReverseEngineerLocale.UnsupportedProvider}");
                return(null);
            }

            return(dbInfo);
        }
示例#11
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);
            }
        }
        public async System.Threading.Tasks.Task ReverseEngineerCodeFirstAsync(Project project)
        {
            await ThreadHelper.JoinableTaskFactory.SwitchToMainThreadAsync();

            if (_package.Dte2.Mode == vsIDEMode.vsIDEModeDebug)
            {
                EnvDteHelper.ShowError("Cannot generate code while debugging");
                return;
            }
            var projectPath  = project.Properties.Item("FullPath")?.Value.ToString();
            var optionsPaths = project.GetConfigFiles();
            var optionsPath  = optionsPaths.First();

            if (optionsPaths.Count > 1)
            {
                var pcd = _package.GetView <IPickConfigDialog>();
                pcd.PublishConfigurations(optionsPaths.Select(m => new ConfigModel
                {
                    ConfigPath  = m,
                    ProjectPath = projectPath
                }));

                var pickConfigResult = pcd.ShowAndAwaitUserResponse(true);
                if (!pickConfigResult.ClosedByOK)
                {
                    return;
                }

                optionsPath = pickConfigResult.Payload.ConfigPath;
            }
            await ReverseEngineerCodeFirstAsync(project, optionsPath, false);
        }
        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 = _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);
        }
示例#14
0
        public static List <string> GenerateFiles(this Project project, List <Tuple <string, string> > result, string extension)
        {
            var list = new List <string>();

            foreach (var item in result)
            {
                if (item.Item1.IndexOfAny(Path.GetInvalidPathChars()) >= 0 ||
                    item.Item1.IndexOfAny(Path.GetInvalidFileNameChars()) >= 0)
                {
                    EnvDteHelper.ShowError("Invalid name: " + item.Item1);
                    return(list);
                }

                var filePath = Path.Combine(Path.GetTempPath(),
                                            item.Item1 + extension);

                if (File.Exists(filePath))
                {
                    File.SetAttributes(filePath, FileAttributes.Normal);
                }
                File.WriteAllText(filePath, item.Item2);
                File.SetAttributes(filePath, FileAttributes.ReadOnly);

                list.Add(filePath);
            }
            return(list);
        }
        public void SyncFxDeprovisionDatabase(object sender, ExecutedRoutedEventArgs e)
        {
            var databaseInfo = ValidateMenuInfo(sender);

            if (databaseInfo == null)
            {
                return;
            }

            if (databaseInfo.DatabaseInfo.DatabaseType != DatabaseType.SQLCE35)
            {
                EnvDteHelper.ShowError("Sorry, only version 3.5 databases are supported for now");
                return;
            }
            if (!SyncFxHelper.IsProvisioned(databaseInfo.DatabaseInfo))
            {
                EnvDteHelper.ShowError("The database is not provisioned, cannot deprovision");
                return;
            }
            try
            {
                new SyncFxHelper().DeprovisionDatabase(databaseInfo.DatabaseInfo.ConnectionString);
                databaseInfo.ExplorerControl.RefreshTables(databaseInfo.DatabaseInfo);
                EnvDteHelper.ShowMessage("Database deprovisioned");
                DataConnectionHelper.LogUsage("DatabaseSyncDeprovision");
            }
            catch (Exception ex)
            {
                DataConnectionHelper.SendError(ex, databaseInfo.DatabaseInfo.DatabaseType, false);
            }
        }
        private void ReportRevEngErrors(EfCoreReverseEngineerResult revEngResult, string missingProviderPackage)
        {
            var errors = new StringBuilder();

            foreach (var entityError in revEngResult.EntityErrors)
            {
                errors.Append($"Table: {entityError.Key}{Environment.NewLine}");
                errors.Append($"Error: {entityError.Value}{Environment.NewLine}");
            }
            if (revEngResult.EntityErrors.Count == 0)
            {
                errors.Insert(0, "Model generated successfully." + Environment.NewLine);
            }
            else
            {
                errors.Insert(0, "The following issues were encountered:" + Environment.NewLine);
            }

            if (!string.IsNullOrEmpty(missingProviderPackage))
            {
                errors.AppendLine();
                errors.AppendFormat("The \"{0}\" NuGet package was not found in the project - it must be installed in order to build.", missingProviderPackage);
            }

            EnvDteHelper.ShowMessage(errors.ToString());
        }
        internal void LogError(List <string> statusMessages, Exception exception)
        {
            ThreadHelper.JoinableTaskFactory.Run(async delegate {
                // Switch to main thread
                await ThreadHelper.JoinableTaskFactory.SwitchToMainThreadAsync();

                _dte2.StatusBar.Text = "An error occurred. See the Output window for details.";

                try
                {
                    var buildOutputWindow = _dte2.ToolWindows.OutputWindow.OutputWindowPanes.Item("Build");
                    buildOutputWindow.OutputString(Environment.NewLine);

                    foreach (var error in statusMessages)
                    {
                        buildOutputWindow.OutputString(error + Environment.NewLine);
                    }
                    if (exception != null)
                    {
                        buildOutputWindow.OutputString(exception + Environment.NewLine);
                    }

                    buildOutputWindow.Activate();
                }
                catch
                {
                    EnvDteHelper.ShowError(exception.ToString());
                }
            });
        }
        private async Task GetMigrationStatus()
        {
            try
            {
                StartAnimation();
                _package.Dte2.StatusBar.Text = "Getting Migration Status";
                if (_project.TryBuild())
                {
                    var processResult = await _processLauncher.GetOutputAsync(_outputPath, GenerationType.MigrationStatus, null);

                    ReportStatus(processResult);
                }
                else
                {
                    EnvDteHelper.ShowError("Build failed");
                }
            }
            catch (Exception ex)
            {
                EnvDteHelper.ShowError(ex.ToString());
            }
            finally
            {
                _package.Dte2.StatusBar.Text = string.Empty;
                StopAnimation();
            }
        }
        private async void Window_Loaded(object sender, RoutedEventArgs e)
        {
            cmbDbContext.IsEnabled      = false;
            imgUnicorn.Opacity          = 0;
            txtMigrationName.Visibility = Visibility.Collapsed;
            lblMigration.Visibility     = Visibility.Collapsed;
            btnApply.Visibility         = Visibility.Collapsed;

            var image        = new Image();
            var thisassembly = Assembly.GetExecutingAssembly();
            var imageStream  = thisassembly.GetManifestResourceStream("EFCorePowerTools.Resources.Unicorn.png");
            var bmp          = BitmapFrame.Create(imageStream);

            image.Source           = bmp;
            imgUnicorn.ImageSource = image.Source;

            await GetMigrationStatus();

            if (cmbDbContext.Items.Count == 0)
            {
                EnvDteHelper.ShowMessage("No valid DbContext classes found in the current project");
                Close();
            }
            cmbDbContext.IsEnabled = true;
        }
示例#20
0
        public void AddCe35Database(object sender, ExecutedRoutedEventArgs e)
        {
            // http://www.mztools.com/articles/2007/MZ2007011.aspx
            if (!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;
                if (objIVsDataConnectionDialogFactory == null)
                {
                    return;
                }
                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))
                {
                    DataConnectionHelper.SaveDataConnection(_package, objIVsDataConnectionDialog.EncryptedConnectionString, DatabaseType.SQLCE35, new Guid(Resources.SqlCompact35Provider));
                    var control = _parentWindow.Content as ExplorerControl;
                    control?.BuildDatabaseTree();
                    DataConnectionHelper.LogUsage("DatabasesAddCe35Database");
                }
                objIVsDataConnectionDialog.Dispose();
            }
            catch (Exception ex)
            {
                DataConnectionHelper.SendError(ex, DatabaseType.SQLCE35);
            }
        }
        internal void LogError(List <string> statusMessages, Exception exception)
        {
            _dte2.StatusBar.Text = "An error occurred. See the Output window for details.";

            try
            {
                var buildOutputWindow = _dte2.ToolWindows.OutputWindow.OutputWindowPanes.Item("Build");
                buildOutputWindow.OutputString(Environment.NewLine);

                foreach (var error in statusMessages)
                {
                    buildOutputWindow.OutputString(error + Environment.NewLine);
                }
                if (exception != null)
                {
                    buildOutputWindow.OutputString(exception + Environment.NewLine);
                }

                buildOutputWindow.Activate();
            }
            catch
            {
                EnvDteHelper.ShowError(exception.ToString());
            }
        }
        private void GenerateDgml(List <Tuple <string, string> > modelResult, Project project)
        {
            var         dgmlBuilder = new DgmlBuilder.DgmlBuilder();
            ProjectItem item        = null;

            foreach (var info in modelResult)
            {
                var dgmlText = dgmlBuilder.Build(info.Item2, info.Item1, GetTemplate());

                if (info.Item1.IndexOfAny(Path.GetInvalidPathChars()) >= 0 ||
                    info.Item1.IndexOfAny(Path.GetInvalidFileNameChars()) >= 0)
                {
                    EnvDteHelper.ShowError("Invalid name: " + info.Item1);
                    return;
                }

                var path = Path.Combine(Path.GetTempPath(), info.Item1 + ".dgml");

                File.WriteAllText(path, dgmlText, Encoding.UTF8);
                item = project.ProjectItems.GetItem(Path.GetFileName(path));
                if (item != null)
                {
                    item.Delete();
                }
                item = project.ProjectItems.AddFromFileCopy(path);
            }

            if (item != null)
            {
                var window = item.Open();
                window.Document.Activate();
            }
        }
        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 void ReportTableData(object sender, ExecutedRoutedEventArgs e)
        {
            string sqlText;
            var    menuItem = sender as MenuItem;
            var    ds       = new DataSet();
            var    menuInfo = menuItem?.CommandParameter as MenuCommandParameters;

            if (menuInfo == null)
            {
                return;
            }
            try
            {
                using (var repository = Helpers.RepositoryHelper.CreateRepository(menuInfo.DatabaseInfo))
                {
                    var generator = DataConnectionHelper.CreateGenerator(repository, menuInfo.DatabaseInfo.DatabaseType);
                    generator.GenerateViewSelect(menuInfo.Name);
                    OpenSqlEditorToolWindow(menuInfo, generator.GeneratedScript);

                    sqlText = Environment.NewLine + generator.GeneratedScript
                              + 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);
                if (dbName != null)
                {
                    var window = pkg.CreateWindow <ReportWindow>(Math.Abs(menuInfo.Name.GetHashCode() - dbName.GetHashCode()));
                    if (window == null)
                    {
                        return;
                    }
                    window.Caption = menuInfo.Name + " (" + dbName + ")";
                    pkg.ShowWindow(window);

                    var control = window.Content as ReportControl;
                    if (control != null)
                    {
                        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();
        }
        public void GenerateServerDgmlFiles()
        {
            try
            {
                if (_package.Dte2.Mode == vsIDEMode.vsIDEModeDebug)
                {
                    EnvDteHelper.ShowError("Cannot generate code while debugging");
                    return;
                }

                // Show dialog with SqlClient selected by default
                var dialogFactory = _package.GetService <IVsDataConnectionDialogFactory>();
                var dialog        = dialogFactory.CreateConnectionDialog();
                dialog.AddAllSources();
                dialog.SelectedSource = new Guid("067ea0d9-ba62-43f7-9106-34930c60c528");
                var dialogResult = dialog.ShowDialog(connect: true);

                if (dialogResult == null)
                {
                    return;
                }

                _package.Dte2.StatusBar.Text = "Loading schema information...";

                var dbInfo = GetDatabaseInfo(dialogResult, DataProtection.DecryptString(dialog.EncryptedConnectionString));

                if (dbInfo.DatabaseType == DatabaseType.SQLCE35)
                {
                    EnvDteHelper.ShowError($"Unsupported provider: {dbInfo.ServerVersion}");
                    return;
                }

                var ptd = new PickTablesDialog();
                using (var repository = RepositoryHelper.CreateRepository(dbInfo))
                {
                    ptd.Tables = repository.GetAllTableNamesForExclusion();
                }

                var res = ptd.ShowModal();
                if (!res.HasValue || !res.Value)
                {
                    return;
                }

                var path = Path.GetTempFileName() + ".dgml";

                using (var repository = RepositoryHelper.CreateRepository(dbInfo))
                {
                    var generator = RepositoryHelper.CreateGenerator(repository, path, dbInfo.DatabaseType);
                    generator.GenerateSchemaGraph(dbInfo.ConnectionString, ptd.Tables);
                    _package.Dte2.ItemOperations.OpenFile(path);
                    _package.Dte2.ActiveDocument.Activate();
                }
            }
            catch (Exception ex)
            {
                _package.LogError(new List <string>(), ex);
            }
        }
        public void RemoveDatabaseConnection(object sender, ExecutedRoutedEventArgs e)
        {
            try
            {
                var databaseInfo = ValidateMenuInfo(sender);
                if (databaseInfo == null)
                {
                    return;
                }

                if (databaseInfo.DatabaseInfo.FromServerExplorer)
                {
                    bool providerInstalled = true;
                    var  provider          = new Guid(Resources.SqlCompact40Provider);
                    if (databaseInfo.DatabaseInfo.DatabaseType == DatabaseType.SQLCE35)
                    {
                        provider = new Guid(Resources.SqlCompact35Provider);
                    }
                    if (databaseInfo.DatabaseInfo.DatabaseType == DatabaseType.SQLite)
                    {
                        provider = new Guid(Resources.SqlitePrivateProvider);
                    }

                    providerInstalled = DataConnectionHelper.DdexProviderIsInstalled(provider);

                    if (!providerInstalled)
                    {
                        if (databaseInfo.DatabaseInfo.DatabaseType == DatabaseType.SQLCE40)
                        {
                            provider          = new Guid(Resources.SqlCompact40PrivateProvider);
                            providerInstalled = DataConnectionHelper.DdexProviderIsInstalled(provider);
                        }

                        if (!providerInstalled)
                        {
                            EnvDteHelper.ShowError("The DDEX provider is not installed, cannot remove connection");
                            return;
                        }
                    }
                    DataConnectionHelper.RemoveDataConnection(package, databaseInfo.DatabaseInfo.ConnectionString, provider);
                }
                else
                {
                    DataConnectionHelper.RemoveDataConnection(databaseInfo.DatabaseInfo.ConnectionString);
                }
                var control = _parentWindow.Content as ExplorerControl;
                if (control != null)
                {
                    control.BuildDatabaseTree();
                }
                DataConnectionHelper.LogUsage("DatabaseRemoveCe");
            }
            catch (Exception ex)
            {
                DataConnectionHelper.SendError(ex, DatabaseType.SQLCE35);
            }
        }
        public void Generate(string outputPath, Project project, GenerationType generationType)
        {
            try
            {
                if (string.IsNullOrEmpty(outputPath))
                {
                    throw new ArgumentException(outputPath, nameof(outputPath));
                }

                if (project.Properties.Item("TargetFrameworkMoniker") == null)
                {
                    EnvDteHelper.ShowError("The selected project type has no TargetFrameworkMoniker");
                    return;
                }

                if (!project.Properties.Item("TargetFrameworkMoniker").Value.ToString().Contains(".NETFramework") &&
                    !project.Properties.Item("TargetFrameworkMoniker").Value.ToString().Contains(".NETCoreApp,Version=v2.0"))
                {
                    EnvDteHelper.ShowError("Currently only .NET Framework and .NET Core 2.0 projects are supported - TargetFrameworkMoniker: " + project.Properties.Item("TargetFrameworkMoniker").Value);
                    return;
                }

                bool isNetCore = project.Properties.Item("TargetFrameworkMoniker").Value.ToString().Contains(".NETCoreApp,Version=v2.0");

                var processResult = _processLauncher.GetOutput(outputPath, isNetCore, generationType);

                if (processResult.StartsWith("Error:"))
                {
                    throw new ArgumentException(processResult, nameof(processResult));
                }

                switch (generationType)
                {
                case GenerationType.Dgml:
                    GenerateDgml(processResult, project);
                    Telemetry.TrackEvent("PowerTools.GenerateModelDgml");
                    break;

                case GenerationType.Ddl:
                    GenerateFiles(processResult, project, ".sql");
                    Telemetry.TrackEvent("PowerTools.GenerateSqlCreate");
                    break;

                case GenerationType.DebugView:
                    GenerateFiles(processResult, project, ".txt");
                    Telemetry.TrackEvent("PowerTools.GenerateDebugView");
                    break;

                default:
                    break;
                }
            }
            catch (Exception exception)
            {
                _package.LogError(new List <string>(), exception);
            }
        }
        public void GenerateServerDgmlFiles()
        {
            try
            {
                if (_package.Dte2.Mode == vsIDEMode.vsIDEModeDebug)
                {
                    EnvDteHelper.ShowError("Cannot generate code while debugging");
                    return;
                }

                var databaseList = EnvDteHelper.GetDataConnections(_package);

                var psd     = new PickServerDatabaseDialog(databaseList, _package);
                var diagRes = psd.ShowModal();
                if (!diagRes.HasValue || !diagRes.Value)
                {
                    return;
                }

                _package.Dte2.StatusBar.Text = "Loading schema information...";

                var dbInfo = psd.SelectedDatabase.Value;

                if (dbInfo.DatabaseType == DatabaseType.SQLCE35)
                {
                    EnvDteHelper.ShowError($"Unsupported provider: {dbInfo.ServerVersion}");
                    return;
                }

                var ptd = new PickTablesDialog();
                using (var repository = RepositoryHelper.CreateRepository(dbInfo))
                {
                    ptd.Tables = repository.GetAllTableNamesForExclusion();
                }

                var res = ptd.ShowModal();
                if (!res.HasValue || !res.Value)
                {
                    return;
                }

                var path = Path.GetTempFileName() + ".dgml";

                using (var repository = RepositoryHelper.CreateRepository(dbInfo))
                {
                    var generator = RepositoryHelper.CreateGenerator(repository, path, dbInfo.DatabaseType);
                    generator.GenerateSchemaGraph(dbInfo.ConnectionString, ptd.Tables);
                    _package.Dte2.ItemOperations.OpenFile(path);
                    _package.Dte2.ActiveDocument.Activate();
                }
                Telemetry.TrackEvent("PowerTools.GenerateSchemaDgml");
            }
            catch (Exception ex)
            {
                _package.LogError(new List <string>(), ex);
            }
        }
示例#29
0
        DatabaseDefinitionModel IVisualStudioAccess.PromptForNewDatabaseDefinition()
        {
            var fileName = EnvDteHelper.PromptForDacpac();

            return(new DatabaseDefinitionModel
            {
                FilePath = fileName,
            });
        }
示例#30
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);
            }
        }