2015-04-21 7 views
-2

Я постараюсь быть максимально ясным. Основная информация: У меня есть четыре БД на одном сервере, каждый БД имеет таблицу версий БД. Я могу прочитать их, установив соединение с одним из этих DB только с одним ConnectionString и получив результат из одного большого куска SQL-запроса . Они отображаются в datagridview в моем WindowsFormsApp. код выглядит следующим образом:Несколько соединений с различными строками подключения

private void FillDataWithGrid() 
    { 
     string ConString = ConfigurationManager.ConnectionStrings["conStrA"].ConnectionString; 

     //string ConStringFG = ConfigurationManager.ConnectionStrings["conStrB"].ConnectionString; 
     string CmdString = string.Empty; 
     string CmdStrBLM = string.Empty; 
     string CmdStrFg = string.Empty; 

     DataTable dtBlm = null; 

     using (SqlConnection connBLM = new SqlConnection(CmdStrBLM)) 
     { 
      CmdStrBLM = 
       "SELECT dbname, Version, UpdateTime FROM(SELECT TOP 1 'DB.A' as dbname, Version, UpdateTime " + 
         "FROM [DB.A].[dbo].[DatabaseVersion] ORDER BY UpdateTime DESC)as tbl1 " + 
         "UNION ALL " + 
         "SELECT dbname, Version, UpdateTime " + 
         "FROM(SELECT TOP 1 'DB.B' as dbname, Version, UpdateTime " + 
         "FROM [DB.B].[dbo].[DatabaseVersion] " + 
         "ORDER BY UpdateTime DESC)as tbl2 " + 
         "UNION ALL " + 
         "SELECT dbname, Version, UpdateTime FROM(" + 
         "SELECT TOP 1 'DB.C' as dbname, Version, UpdateTime " + 
         "FROM [DB.C].[dbo].[DatabaseVersion] " + 
         "ORDER BY UpdateTime DESC)as tbl3 " + 
         "UNION ALL " + 
         "SELECT dbname, Version, UpdateTime FROM(" + 
         "SELECT TOP 1 'DB.D' as dbname, Version, UpdateTime " + 
         "FROM [DB.D].[dbo].[DatabaseVersion] " + 
         "ORDER BY UpdateTime DESC)as tbl4"; 

      SqlCommand cmd = new SqlCommand(CmdString, con); 
      SqlDataAdapter sda = new SqlDataAdapter(cmd); 
      DataTable dt = new DataTable(); 
      sda.Fill(dt); 
      dataGridView1.DataSource = dt.DefaultView; 

Теперь, что я хочу добиться того, чтобы подключиться к каждому из базы данных отдельно от собственной строки подключения.

Будет ли это связано с несколькими соединениями? Если да, то как обращаться с ними с четырьмя различными соединениями?

Упование вы видите мою точку зрения. Любые подсказки или советы были бы высоко оценены. Благодаря!

+0

Что происходит, когда вы запускаете свой собственный код ..? во-вторых, почему бы вам не протестировать код в студии управления sql и посмотреть, получите ли вы результаты, которые вы ожидаете .. если вы это сделаете .. тогда я бы предложил поместить весь этот код sql в хранимую процедуру, а затем выполнить код, заполняющий таким образом datatable .. также 'DataTable dtBlm = null;' почему это объявлено, если вы не используете его ..? – MethodMan

+0

для чего нужны пустые голоса? – Jakubee

+0

код работает отлично. Я просто борюсь с идеей о том, как обращаться с соединением несколько раз. Кроме того, я не могу сделать это с помощью SP. – Jakubee

ответ

0

Как-то мне удается заставить его работать. Отправьте это для дальнейшего использования. У меня есть идея от here.

Решение включает в себя получение данных в формате DataTable, проходящих в строке соединения и sqlCommand. Повторите это четыре раза, чтобы вернуть DT из каждого соединения. Затем создайте DataSet, который будет содержать все DT. Создайте еще один DT для объединения результатов из DataSet с использованием цикла:

DataSet ds = new DataSet(); 
ds.Tables.Add(GetData(GetConnectionString(conStringBlm), CmdStrBlm)); 
//... do this for each connection string 
DataTable dtAll = ds.Tables[0].Copy(); 
     for (var i = 1; i < ds.Tables.Count; i++) 
     { 
      dtAll.Merge(ds.Tables[i]); 
     } 
     dataGridView1.AutoGenerateColumns = true; 
     dataGridView1.DataSource = dtAll; 
2

Конечно, вы можете сделать, вернув разные таблицы данных, но я не вижу причины для этого требования с четырьмя различными подключениями к одной и той же БД. Всегда лучше обрабатывать информацию о слиянии в БД в качестве текущего метода. Будет очень дорого получить все данные из разных подключений и объединить возвращаемый datatable.

+0

Не к одной и той же БД, но к четырем различным разрядам. – Jakubee

+0

Не имеет значения, все тот же сервер. –

Смежные вопросы