示例#1
0
 /// <summary>
 /// Constructor for DatabaseConnectionTestProgressInfo
 /// </summary>
 /// <param name="connectionTestDetails">The current state of a connection test.</param>
 /// <param name="connectionTestPercentComplete">A number used to monitor the progress through
 /// a list of connection tests.</param>
 public DatabaseConnectionTestProgressInfo(
     DatabaseConnectionTestDetails connectionTestDetails,
     int connectionTestPercentComplete)
 {
     this.ConnectionTestDetails         = connectionTestDetails;
     this.ConnectionTestPercentComplete = connectionTestPercentComplete;
 }
示例#2
0
        /// <summary>
        /// Runs the database connection tests asynchronously.
        /// </summary>
        public async void ConnectionTestsRunAsync()
        {
            this.databaseConnectionTestException = null;
            try
            {
                this.databaseConnectionTestList = this.configurationTestRunner.GetDatabaseConnectionTestList();
            }
            catch (Exception ex)
            {
                this.databaseConnectionTestException = ex;
                return;
            }

            this.progressBar.Maximum = 100;
            this.progressBar.Value   = 0;

            this.databaseConnectionTestData = DatabaseConnectionTestDetails.ConvertToDataSet(
                this.databaseConnectionTestList);
            this.connectionTestBindingSource.DataSource = this.databaseConnectionTestData;

            IProgress <DatabaseConnectionTestProgressInfo> progress =
                new Progress <DatabaseConnectionTestProgressInfo>(
                    (connectionTestProgressInfo) =>
                    this.UpdateConnectionTestResult(connectionTestProgressInfo));

            this.cancellationTokenSource = new CancellationTokenSource();

            await configurationTestRunner.DatabaseConnectionTestsRunAsync(
                new DatabaseConnectionTestRunner(this.databaseConnectionCheckerFactory),
                cancellationTokenSource.Token,
                progress);
        }
        /// <summary>
        /// Run a database connection test.
        /// </summary>
        /// <param name="databaseConnectionTestDetails">Details about the database connection
        /// test that needs to be executed. The result of the connection test is applied to properties
        /// of this object.</param>
        protected override void Run(DatabaseConnectionTestDetails databaseConnectionTestDetails)
        {
            IDatabaseConnectionChecker databaseConnectionChecker =
                this.databaseConnectionCheckerFactory.CreateDatabaseConnectionChecker(
                    databaseConnectionTestDetails.ProviderName);
            Exception testException = null;

            databaseConnectionTestDetails.WasTestSuccessful = databaseConnectionChecker.TestConnection(
                databaseConnectionTestDetails.ConnectionString, out testException);
            databaseConnectionTestDetails.WasTestRun      = true;
            databaseConnectionTestDetails.ConnectionError = testException;
            if (testException != null)
            {
                databaseConnectionTestDetails.ConnectionErrorText = testException.ToString();
            }
        }
示例#4
0
        /// <summary>
        /// Updates the local database connection test datasource according to newly
        /// reported progress info.
        /// </summary>
        /// <param name="connectionTestProgressInfo">A report of newly updated data
        /// relating to a revcently executed database connection test.</param>
        private void UpdateConnectionTestResult(DatabaseConnectionTestProgressInfo connectionTestProgressInfo)
        {
            DatabaseConnectionTestDetails latestConnectionTest = connectionTestProgressInfo.ConnectionTestDetails;

            DatabaseConnectionTestDetailsDataSet.DatabaseConnectionTestDetailsRow connectionDataRow =
                this.databaseConnectionTestData.DatabaseConnectionTestDetails.Rows.Find(latestConnectionTest.ConnectionName)
                as DatabaseConnectionTestDetailsDataSet.DatabaseConnectionTestDetailsRow;

            connectionDataRow.WasTestRun            = latestConnectionTest.WasTestRun;
            connectionDataRow.WasTestSuccessful     = latestConnectionTest.WasTestSuccessful;
            connectionDataRow.ConnectionErrorText   = latestConnectionTest.ConnectionErrorText;
            connectionDataRow.TestStatusDescription = latestConnectionTest.TestStatusDescription;

            this.progressBar.Value = connectionTestProgressInfo.ConnectionTestPercentComplete;
            if (this.progressBar.Value == this.progressBar.Maximum)
            {
                this.ConnectionTestsCompleted();
            }
        }
示例#5
0
        /// <summary>
        /// Implements asynchronous database connection tests based on the given
        /// configuration source.
        /// </summary>
        /// <param name="databaseConnectionTestRunnerBase">An imlementation of
        /// DatabaseConnectionTestRunnerBase which will perform the database tests.</param>
        /// <param name="cancellationToken">Required to support cancellation of the
        /// asynchronous database connection tests.</param>
        /// <param name="progress">Required to support progress reporting on
        /// the testing of database connections.</param>
        /// <returns>List of database Connection Test details.</returns>
        public async override Task <List <DatabaseConnectionTestDetails> > DatabaseConnectionTestsRunAsync(
            DatabaseConnectionTestRunnerBase databaseConnectionTestRunner,
            CancellationToken cancellationToken = default(CancellationToken),
            IProgress <DatabaseConnectionTestProgressInfo> progress = null)
        {
            List <Task <DatabaseConnectionTestDetails> > taskList = new List <Task <DatabaseConnectionTestDetails> >();

            foreach (DatabaseConnectionTestDetails databaseConnectionTestDetails
                     in this.databaseConnectionTestDetailsList)
            {
                Task <DatabaseConnectionTestDetails> newTask = (
                    databaseConnectionTestRunner.RunAsync(
                        databaseConnectionTestDetails,
                        cancellationToken));
                taskList.Add(newTask);
            }

            int connectionTestNumber = 1;
            int connectionTestCount  = this.databaseConnectionTestDetailsList.Count;

            while (taskList.Count > 0)
            {
                Task <DatabaseConnectionTestDetails> connectionTestTask = await Task.WhenAny(taskList);

                taskList.Remove(connectionTestTask);
                if (connectionTestTask.IsCanceled)
                {
                    continue;
                }
                DatabaseConnectionTestDetails latestConnectionTestDetails = await connectionTestTask;
                if (progress != null)
                {
                    int connectionTestPercentComplete = 100 * connectionTestNumber / connectionTestCount;
                    progress.Report(new DatabaseConnectionTestProgressInfo(
                                        latestConnectionTestDetails,
                                        connectionTestPercentComplete
                                        ));
                    connectionTestNumber++;
                }
            }
            return(this.databaseConnectionTestDetailsList);
        }