private void ExportServerDatabaseToEmbedded(DatabaseType databaseType, DatabaseMenuCommandParameters parameters) { string filter = DataConnectionHelper.GetSqlCeFileFilter(); Scope scope = Scope.SchemaData; if (databaseType == DatabaseType.SQLite) { filter = DataConnectionHelper.GetSqliteFileFilter(); scope = Scope.SchemaDataSQLite; } Debug.Assert(databaseType == DatabaseType.SQLite || databaseType == DatabaseType.SQLCE40, "Unexpected database type"); try { string connectionString = parameters.DatabaseInfo != null ? parameters.DatabaseInfo.ConnectionString : DataConnectionHelper.PromptForConnectionString(package); if (!string.IsNullOrEmpty(connectionString)) { 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)) { string dbName; string dbConnectionString = null; SaveFileDialog fd = new SaveFileDialog(); fd.Title = "Export as"; fd.Filter = filter; fd.OverwritePrompt = true; fd.ValidateNames = true; bool?result = fd.ShowDialog(); if (result.HasValue && result.Value == true) { dbName = fd.FileName; try { if (databaseType == DatabaseType.SQLCE40) { package.SetStatus("Creating SQL Server Compact database..."); SqlCeScripting.SqlCeHelper4 helper = new SqlCeScripting.SqlCeHelper4(); dbConnectionString = string.Format("Data Source={0};Max Database Size=4091", dbName); if (System.IO.File.Exists(dbName)) { File.Delete(dbName); } helper.CreateDatabase(dbConnectionString); } if (databaseType == DatabaseType.SQLite) { package.SetStatus("Creating SQLite database..."); var helper = new SqliteHelper(); dbConnectionString = string.Format("Data Source={0};", dbName); if (System.IO.File.Exists(dbName)) { File.Delete(dbName); } helper.CreateDatabase(dbConnectionString); } BackgroundWorker bw = new BackgroundWorker(); List <object> workerParameters = new List <object>(); workerParameters.Add(dbConnectionString); workerParameters.Add(connectionString); workerParameters.Add(ptd.Tables); workerParameters.Add(databaseType.ToString()); workerParameters.Add(scope.ToString()); bw.DoWork += new DoWorkEventHandler(bw_DoWork); bw.RunWorkerCompleted += (s, ea) => { try { if (ea.Error != null) { Helpers.DataConnectionHelper.SendError(ea.Error, databaseType, false); } Helpers.DataConnectionHelper.LogUsage("DatabasesExportFromServer"); } finally { bw.Dispose(); } }; bw.RunWorkerAsync(workerParameters); } catch (Exception ex) { Helpers.DataConnectionHelper.SendError(ex, databaseType, false); } } } } } catch (Exception ex) { Helpers.DataConnectionHelper.SendError(ex, DatabaseType.SQLServer); } }
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); }
private void ExportServerDatabaseToEmbedded(DatabaseType databaseType, DatabaseMenuCommandParameters parameters) { string filter = DataConnectionHelper.GetSqlCeFileFilter(); Scope scope = Scope.SchemaData; if (databaseType == DatabaseType.SQLite) { filter = DataConnectionHelper.GetSqliteFileFilter(); scope = Scope.SchemaDataSQLite; } Debug.Assert(databaseType == DatabaseType.SQLite || databaseType == DatabaseType.SQLCE40, "Unexpected database type"); try { string connectionString = parameters.DatabaseInfo != null ? parameters.DatabaseInfo.ConnectionString : DataConnectionHelper.PromptForConnectionString(package); if (!string.IsNullOrEmpty(connectionString)) { 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)) { string dbName; string dbConnectionString = null; SaveFileDialog fd = new SaveFileDialog(); fd.Title = "Export as"; fd.Filter = filter; fd.OverwritePrompt = true; fd.ValidateNames = true; bool? result = fd.ShowDialog(); if (result.HasValue && result.Value == true) { dbName = fd.FileName; try { if (databaseType == DatabaseType.SQLCE40) { package.SetStatus("Creating SQL Server Compact database..."); SqlCeScripting.SqlCeHelper4 helper = new SqlCeScripting.SqlCeHelper4(); dbConnectionString = string.Format("Data Source={0};Max Database Size=4091", dbName); if (System.IO.File.Exists(dbName)) File.Delete(dbName); helper.CreateDatabase(dbConnectionString); } if (databaseType == DatabaseType.SQLite) { package.SetStatus("Creating SQLite database..."); var helper = new SqliteHelper(); dbConnectionString = string.Format("Data Source={0};", dbName); if (System.IO.File.Exists(dbName)) File.Delete(dbName); helper.CreateDatabase(dbConnectionString); } BackgroundWorker bw = new BackgroundWorker(); List<object> workerParameters = new List<object>(); workerParameters.Add(dbConnectionString); workerParameters.Add(connectionString); workerParameters.Add(ptd.Tables); workerParameters.Add(databaseType.ToString()); workerParameters.Add(scope.ToString()); bw.DoWork += new DoWorkEventHandler(bw_DoWork); bw.RunWorkerCompleted += (s, ea) => { try { if (ea.Error != null) { Helpers.DataConnectionHelper.SendError(ea.Error, databaseType, false); } Helpers.DataConnectionHelper.LogUsage("DatabasesExportFromServer"); } finally { bw.Dispose(); } }; bw.RunWorkerAsync(workerParameters); } catch (Exception ex) { Helpers.DataConnectionHelper.SendError(ex, databaseType, false); } } } } } catch (Exception ex) { Helpers.DataConnectionHelper.SendError(ex, DatabaseType.SQLServer); } }
private void TestConnection(bool showMessage) { try { if (createDb) { if (!System.IO.File.Exists(dataSourceTextBox.Text)) { var engineHelper = Helpers.DataConnectionHelper.CreateEngineHelper(DbType); engineHelper.CreateDatabase(_connectionString); } } using (Helpers.DataConnectionHelper.CreateRepository(new DatabaseInfo { ConnectionString = _connectionString, DatabaseType = DbType })) { if (showMessage) { EnvDTEHelper.ShowMessage("Connection OK!"); } else { this.DialogResult = 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) { string bakFile = dataSourceTextBox.Text + ".bak"; bool 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); go = true; } else { go = false; } } if (go) { System.IO.File.Copy(dataSourceTextBox.Text, dataSourceTextBox.Text + ".bak"); SqlCeScripting.SqlCeHelper4 helper = new SqlCeScripting.SqlCeHelper4(); helper.UpgradeTo40(_connectionString); this.DialogResult = true; } } catch (Exception ex2) { Helpers.DataConnectionHelper.SendError(ex2, DbType, false); } } } else { Helpers.DataConnectionHelper.SendError(ex, DbType, false); } } }
public void UpgradeTo40(object sender, ExecutedRoutedEventArgs e) { if (EnvDTEHelper.ShowMessageBox("This will upgrade the 3.5 database to 4.0 format, and leave a renamed backup of the 3.5 database. Do you wish to proceed?", OLEMSGBUTTON.OLEMSGBUTTON_YESNO, OLEMSGDEFBUTTON.OLEMSGDEFBUTTON_SECOND, OLEMSGICON.OLEMSGICON_QUERY) == System.Windows.Forms.DialogResult.No) return; if (!Helpers.DataConnectionHelper.IsV40Installed()) { EnvDTEHelper.ShowError("The SQL Server Compact 4.0 runtime is not installed, cannot upgrade. Install the 4.0 runtime."); return; } try { var databaseInfo = ValidateMenuInfo(sender); if (databaseInfo == null) return; SqlCeScripting.SqlCeHelper4 helper = new SqlCeScripting.SqlCeHelper4(); string path = helper.PathFromConnectionString(databaseInfo.DatabaseInfo.ConnectionString); if (!File.Exists(path)) { EnvDTEHelper.ShowError(string.Format("Database file in path: {0} could not be found", path)); return; } string newFile = Path.Combine(Path.GetDirectoryName(path), Path.GetFileNameWithoutExtension(path) + "_35" + Path.GetExtension(path)); if (System.IO.File.Exists(newFile)) { for (int i = 0; i < 100; i++) { newFile = Path.Combine(Path.GetDirectoryName(newFile), Path.GetFileNameWithoutExtension(newFile) + "_" + i.ToString() + "." + Path.GetExtension(newFile)); if (!File.Exists(newFile)) break; } } if (System.IO.File.Exists(newFile)) { EnvDTEHelper.ShowError("Could not create unique file name..."); return; } System.IO.File.Copy(path, newFile); helper.UpgradeTo40(databaseInfo.DatabaseInfo.ConnectionString); EnvDTEHelper.ShowMessage(string.Format("Database upgraded, version 3.5 database backed up to: {0}", newFile)); if (databaseInfo.DatabaseInfo.FromServerExplorer) { Helpers.DataConnectionHelper.RemoveDataConnection(package, databaseInfo.DatabaseInfo.ConnectionString, new Guid(Resources.SqlCompact35Provider)); } else { Helpers.DataConnectionHelper.RemoveDataConnection(databaseInfo.DatabaseInfo.ConnectionString); } Helpers.DataConnectionHelper.SaveDataConnection(databaseInfo.DatabaseInfo.ConnectionString, DatabaseType.SQLCE40, package); ExplorerControl control = _parentWindow.Content as ExplorerControl; control.BuildDatabaseTree(); Helpers.DataConnectionHelper.LogUsage("DatabaseUpgrade40"); } catch (Exception ex) { Helpers.DataConnectionHelper.SendError(ex, DatabaseType.SQLCE35); } }