From bd6cd43f3abbffbb0180204e3f90f96fe9abf866 Mon Sep 17 00:00:00 2001 From: Philipp Maihart Date: Wed, 28 Jul 2010 21:35:19 +0000 Subject: [PATCH] Data Add-In Connection Wizard: new UI git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/branches/reports@6308 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61 --- .../Windows/ConnectionWizardWindow.xaml | 21 ++++++----- .../Windows/ConnectionWizardWindow.xaml.cs | 35 +++++++------------ .../SQLServerDatabaseDriver.cs | 26 +++++++++++++- 3 files changed, 50 insertions(+), 32 deletions(-) diff --git a/src/AddIns/DisplayBindings/Data/ICSharpCode.Data.Core.UI/Windows/ConnectionWizardWindow.xaml b/src/AddIns/DisplayBindings/Data/ICSharpCode.Data.Core.UI/Windows/ConnectionWizardWindow.xaml index 9f83ce12a3..d66a654753 100644 --- a/src/AddIns/DisplayBindings/Data/ICSharpCode.Data.Core.UI/Windows/ConnectionWizardWindow.xaml +++ b/src/AddIns/DisplayBindings/Data/ICSharpCode.Data.Core.UI/Windows/ConnectionWizardWindow.xaml @@ -21,6 +21,7 @@ + @@ -43,7 +44,7 @@ Database driver: + ItemsSource="{x:Static data:DatabaseDriver.DatabaseDrivers}"> @@ -58,7 +59,7 @@ - @@ -66,14 +67,16 @@ - + diff --git a/src/AddIns/DisplayBindings/Data/ICSharpCode.Data.Core.UI/Windows/ConnectionWizardWindow.xaml.cs b/src/AddIns/DisplayBindings/Data/ICSharpCode.Data.Core.UI/Windows/ConnectionWizardWindow.xaml.cs index a828c5abfa..8279b94664 100644 --- a/src/AddIns/DisplayBindings/Data/ICSharpCode.Data.Core.UI/Windows/ConnectionWizardWindow.xaml.cs +++ b/src/AddIns/DisplayBindings/Data/ICSharpCode.Data.Core.UI/Windows/ConnectionWizardWindow.xaml.cs @@ -54,7 +54,12 @@ namespace ICSharpCode.Data.Core.UI.Windows get { return _selectedDatasource; } set { - _selectedDatasource = value; + if (value != null) + btnConnect.IsEnabled = true; + else + btnConnect.IsEnabled = false; + + _selectedDatasource = value; OnPropertyChanged("SelectedDatasource"); } } @@ -133,7 +138,6 @@ namespace ICSharpCode.Data.Core.UI.Windows thread.SetApartmentState(ApartmentState.STA); thread.IsBackground = true; thread.Start(); - } private void PopulateDatabases() @@ -152,7 +156,10 @@ namespace ICSharpCode.Data.Core.UI.Windows } catch (Exception ex) { - SetException(ex); + Dispatcher.BeginInvoke(DispatcherPriority.Background, new Action(() => + { + MessageBox.Show(this, ex.Message, this.Title, MessageBoxButton.OK, MessageBoxImage.Error); + })); } SetIsLoading(false); @@ -168,17 +175,12 @@ namespace ICSharpCode.Data.Core.UI.Windows #region Event handlers - private void cboDatabaseDriver_SelectionChanged(object sender, SelectionChangedEventArgs e) + private void btnAutoDiscover_Click(object sender, RoutedEventArgs e) { PopulateDatasources(); } - private void cboDatasources_SelectionChanged(object sender, SelectionChangedEventArgs e) - { - PopulateDatabases(); - } - - private void erbDatasources_MouseLeftButtonUp(object sender, MouseButtonEventArgs e) + private void btnConnect_Click(object sender, RoutedEventArgs e) { PopulateDatabases(); } @@ -189,18 +191,7 @@ namespace ICSharpCode.Data.Core.UI.Windows { if (SelectedDatabaseDriver != null) { - IDatasource newDatasource = SelectedDatabaseDriver.AddNewDatasource(cboDatasources.Text); - - try - { - if (newDatasource.PopulateDatabases()) - SetSelectedDatasource(newDatasource); - } - catch (Exception ex) - { - SetException(ex); - SetSelectedDatasource(newDatasource); - } + SelectedDatasource = SelectedDatabaseDriver.AddNewDatasource(cboDatasources.Text); } } } diff --git a/src/AddIns/DisplayBindings/Data/ICSharpCode.Data.SQLServer/SQLServerDatabaseDriver.cs b/src/AddIns/DisplayBindings/Data/ICSharpCode.Data.SQLServer/SQLServerDatabaseDriver.cs index a0fbc6f329..7a23c2f4b3 100644 --- a/src/AddIns/DisplayBindings/Data/ICSharpCode.Data.SQLServer/SQLServerDatabaseDriver.cs +++ b/src/AddIns/DisplayBindings/Data/ICSharpCode.Data.SQLServer/SQLServerDatabaseDriver.cs @@ -13,6 +13,8 @@ using ICSharpCode.Data.Core.DatabaseObjects; using System.Data.SqlClient; using System.Collections.Specialized; using ICSharpCode.Data.Core.Enums; +using System.Windows; +using System.Windows.Threading; #endregion @@ -171,7 +173,29 @@ namespace ICSharpCode.Data.Core.DatabaseDrivers.SQLServer SqlConnection sqlConnection = null; sqlConnection = new SqlConnection(); sqlConnection.ConnectionString = datasource.ConnectionString; - sqlConnection.Open(); + + try + { + sqlConnection.Open(); + } + catch (SqlException ex) + { + switch (ex.Number) + { + case 2: + case 3: + case 53: + Application.Current.Dispatcher.BeginInvoke(DispatcherPriority.Background, new Action(() => + { + Datasources.Remove(datasource as SQLServerDatasource); + })); + break; + default: + break; + } + + throw ex; + } string sqlversion = sqlConnection.ServerVersion; sqlversion = sqlversion.Split('.').FirstOrDefault(); //major version