/// <summary> /// Tests the given connection to check if it can successfully connect to the corresponding MySQL instance. /// </summary> /// <param name="connection">MySQL Workbench connection to a MySQL server instance selected by users.</param> /// <param name="displayErrorOnEmptyPassword">Flag indicating whether errors caused by a blank or null password are displayed to the user.</param> /// <returns>Enumeration indicating the result of the connection test.</returns> public static TestConnectionResult TestConnectionAndReturnResult(this MySqlWorkbenchConnection connection, bool displayErrorOnEmptyPassword) { if (connection == null) { return(TestConnectionResult.None); } Globals.ThisAddIn.Application.Cursor = ExcelInterop.XlMousePointer.xlWait; TestConnectionResult connectionResult; Exception connectionException; if (connection.TestConnection(out connectionException)) { connectionResult = TestConnectionResult.ConnectionSuccess; Globals.ThisAddIn.Application.Cursor = ExcelInterop.XlMousePointer.xlDefault; return(connectionResult); } // If the error returned is about the connection failing the password check, it may be because either the stored password is wrong or no password. connectionResult = TestConnectionResult.ConnectionError; if (connectionException is MySqlException) { MySqlException mySqlException = connectionException as MySqlException; switch (mySqlException.Number) { // Connection could not be made. case MySqlWorkbenchConnection.MYSQL_EXCEPTION_NUMBER_SERVER_UNREACHABLE: connectionResult = TestConnectionResult.HostUnreachable; InfoDialog.ShowDialog(InfoDialogProperties.GetErrorDialogProperties( Resources.ConnectFailedWarningTitle, mySqlException.Message, null, mySqlException.InnerException != null ? mySqlException.InnerException.Message : null)); break; // Wrong password. case MySqlWorkbenchConnection.MYSQL_EXCEPTION_NUMBER_WRONG_PASSWORD: connectionResult = TestConnectionResult.WrongPassword; if (!string.IsNullOrEmpty(connection.Password) || displayErrorOnEmptyPassword) { InfoDialog.ShowDialog(InfoDialogProperties.GetWarningDialogProperties( Resources.ConnectFailedWarningTitle, mySqlException.Message, null, connection.IsSsl() ? Resources.ConnectSSLFailedDetailWarning : null)); } break; // Password has expired so any statement can't be run before resetting the expired password. case MySqlWorkbenchConnection.MYSQL_EXCEPTION_NUMBER_EXPIRED_PASSWORD: PasswordDialogFlags passwordFlags = PasswordDialog.ShowExpiredPasswordDialog(connection, false); if (!passwordFlags.Cancelled) { connection.Password = passwordFlags.NewPassword; } connectionResult = passwordFlags.Cancelled ? TestConnectionResult.PasswordExpired : TestConnectionResult.PasswordReset; break; // Any other exception. default: InfoDialog.ShowDialog(InfoDialogProperties.GetErrorDialogProperties( Resources.ConnectFailedWarningTitle, string.Format(Resources.GenericConnectionErrorText, mySqlException.Number, mySqlException.Message), null, mySqlException.InnerException != null ? mySqlException.InnerException.Message : null)); break; } } else { InfoDialog.ShowDialog(InfoDialogProperties.GetErrorDialogProperties( Resources.ConnectFailedWarningTitle, connectionException.Message, null, connectionException.InnerException != null ? connectionException.InnerException.Message : null)); } Globals.ThisAddIn.Application.Cursor = ExcelInterop.XlMousePointer.xlDefault; return(connectionResult); }