2013-02-27 6 views
0

У меня возникла проблема с запуском запроса в нескольких базах данных на Azure SQL Server. Это функция, которую я сделал для возврата DataTable из запроса после его выполнения. Функция принимает имя базы данных в виде строки и вставляет ее в строку conendction вместе с запросом, который должен быть выполнен.Запрос нескольких баз данных SQL Server

Функция работает нормально, когда я запускаю ее один раз, возвращая DataTable, заполненную возвращенными строками, по назначению, но когда я вызываю функцию с помощью инструкции foreach (итерации через список имен базы данных), я получаю ошибку тайм-аута или ошибка с ошибкой входа.

Любая помощь по этому вопросу будет оценена по достоинству.

public static DataTable runQuery(String db, String query) 
    { 

    using (SqlConnection con = new SqlConnection("Data Source=server.database.windows.net;Initial Catalog=" + db + ";User [email protected];Password=password")) 
    { 

     con.Open(); 

     using (DataTable dt = new DataTable()) 
     { 

      try 
      { 

       SqlCommand cmd = new SqlCommand(query, con); 
       SqlDataAdapter da = new SqlDataAdapter(cmd); 

       da.Fill(dt); 

       cmd.Dispose(); 
       da.Dispose(); 

      } 

      catch (SqlException ex) 
      { 
       MessageBox.Show(ex.Message); 
      } 

      return dt; 
     } 

    } 
} 
+0

Установка CommandTimeout в 0 означает "бесконечный". Возможно, попробуйте что-то вроде 600, что составляет 10 минут. (или что-то, что имеет смысл для вашей проблемы). «бесконечный» - это долгое время ... Просто предложение. – granadaCoder

+0

@granadaCoder таймаут теперь 100, Оказывается, проблема была в базе данных SQL, а не на самом деле мой код! – btply

ответ

0

Добавить cmd.CommandTimeout = 0

try 
      { 

       SqlCommand cmd = new SqlCommand(query, con); 
       cmd.CommandTimeout = 0; 
       SqlDataAdapter da = new SqlDataAdapter(cmd); 

       da.Fill(dtt); 

       cmd.Dispose(); 
       da.Dispose(); 

      } 
+0

@Btop вы можете пометить его как ответ в надежде, что ваша проблема будет решена – vikas

+0

Спасибо вам за помощь! – btply

0

Я думаю, вы должны попробовать добавить System.Threading.Thread.Sleep внутри блока Еогеасп.

+0

Спасибо за ответ, я пробовал это, но я все еще получаю ошибку таймаута – btply

+0

Сколько интервалов вы добавили? это на 'Milliseconds' –

+0

Я пробовал несколько, от 200 до 5000 – btply

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