Пример #1
0
        /// <summary>
        /// A thread for executing query within each database
        /// </summary>
        private void DatabaseThread(object db)
        {
            var database = (WorkerDb)db;

            var queryResult = new SqlQueryResult();

            queryResult.QueryId    = _query.Id;
            queryResult.DatabaseId = database.Id;

            try
            {
                var adapter = new SqlDataAdapter(_query.Sql, database.ConnectionString);
                adapter.SelectCommand.CommandTimeout = 0;
                var table = new DataTable();
                adapter.Fill(table);

                var result = new WorkerResult();
                result.DatabaseId = database.Id;

                foreach (DataColumn column in table.Columns)
                {
                    result.AppendColumn(column.Caption);
                }

                foreach (DataRow row in table.Rows)
                {
                    result.AppendRow(row.ItemArray);
                }

                _results.Add(result);
                queryResult.Result = JsonConvert.SerializeObject(result);
            }
            catch (Exception ex)
            {
                var result = new WorkerResult();
                result.DatabaseId = database.Id;
                result.AppendColumn("error");
                result.AppendRow(new object[] { ex.Message });

                queryResult.Result = JsonConvert.SerializeObject(result);
            }
            finally
            {
                using (var dbContext = new OctopusDbContext())
                {
                    dbContext.QueryResults.Add(queryResult);
                    dbContext.SaveChanges();
                }
                Interlocked.Decrement(ref _countdown);
            }
        }