public ReaderContext ExecuteReaderToDataGridView(ConnectionData connData, string sqlQuery) { if (FlagColumns) { /*Создаём название колонки для таблицы*/ DataGridViewTextBoxColumn column1 = new DataGridViewTextBoxColumn(); column1.Name = "server"; column1.HeaderText = "Сервер"; column1.AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill; DataGridViewTextBoxColumn column2 = new DataGridViewTextBoxColumn(); column2.Name = "countStrings"; column2.HeaderText = "Количество строк"; column2.Width = 200; dgvResults.Columns.AddRange(column1, column2); FlagColumns = false; } NpgsqlConnection connection = null; NpgsqlDataReader reader = null; ReaderContext ridearContext = new ReaderContext(reader, connData); try { connection = new NpgsqlConnection(connData.ConnectionString); connection.Open(); if (connection.State == ConnectionState.Open) { NpgsqlCommand command = new NpgsqlCommand(sqlQuery, connection); reader = command.ExecuteReader(); if (reader.HasRows) // Если в результатах запроса есть строки { ridearContext.Reader = reader; //Формируем строку int countRows = 0; while (reader.Read()) { countRows++; } //Закрываем соединение connection.Close(); //Создаём информационную строку DataGridViewRow rowInfo = new DataGridViewRow(); rowInfo.DefaultCellStyle.BackColor = Color.Aqua; //Создаём информационные ячейки о сервере DataGridViewCell cellInfo1 = new DataGridViewTextBoxCell(); //cellInfo. cellInfo1.Value = connData.ServerName; //Создаём информационные ячейки о сервере DataGridViewCell cellInfo2 = new DataGridViewTextBoxCell(); //cellInfo. cellInfo2.Value = countRows; //Добавляем ячейку в строку rowInfo.Cells.AddRange(cellInfo1, cellInfo2); //Добавляем строку в таблицу dgvResults.Rows.Add(rowInfo); return(ridearContext); } return(ridearContext); } return(ridearContext); } catch (Exception ex) { MessageBox.Show(ex.Message); return(ridearContext); } finally { if (connection != null) { //выполнено отключение connection.Close(); } } }
private void btnRun_Click(object sender, EventArgs e) { if (rtbQuery.Text == "") { MessageBox.Show("Вы не ввели запрос!"); } else if (dgvServers.Rows.Count < 1) { MessageBox.Show("Вы не добавили ни одного сервера!"); } else { //Показываем и Устанавливаем статусбар в нулевое значение pbExequteQuery.Visible = true; pbExequteQuery.Value = 0; //Отображает сообщение lbMessage.Visible = false; lbMessage.Text = ""; //Считаем количество выделенных серверов int countSelServers = 0; //Счётчик опрошенных серверов int countServers = 1; foreach (DataGridViewRow row in dgvServers.Rows) { //Если сервер отмечен галочкой if (row.Cells[0].Value.ToString() == "True") { countSelServers++; } } FlagColumns = true; dgvResults.Columns.Clear(); dgvResults.Rows.Clear(); foreach (DataGridViewRow row in dgvServers.Rows) { //Получаем запрос из формы string sqlQuery = rtbQuery.Text; //Если сервер отмечен галочкой if (row.Cells[0].Value.ToString() == "True") { string servName = row.Cells[2].Value.ToString(); //Название сервера string adressIP = row.Cells[3].Value.ToString(); //Адрес IP string port = row.Cells[4].Value.ToString(); //Порт string database = row.Cells[5].Value.ToString(); //База данных string user = row.Cells[6].Value.ToString(); //Пользователь string timeout = row.Cells[7].Value.ToString(); //Таймаут string passw = row.Cells[8].Value.ToString(); //Пароль //Создаём объект соединения ConnectionData cd = new ConnectionData(servName, adressIP, port, database, user, passw, timeout); //Выводим результат выполнения запроса в форму ReaderContext rc = ExecuteReaderToDataGridView(cd, sqlQuery); ListReaderContext.Add(rc); //Устанавливаем прогресс статусбара pbExequteQuery.Value += 100 / countSelServers; lbMessage.Visible = true; lbMessage.Text = String.Format("Выполнен запрос на {0} сервере из {1}", countServers, countSelServers); countServers++; } } } }