2013-02-27 138 views
0

我在Azure SQL Server上的多个数据库上运行查询时遇到问题。这是我从查询中返回DataTable一旦执行的功能。该函数将数据库名称作为字符串并将其插入到conenction字符串中,以及要执行的查询。查询多个数据库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 2013-03-06 15:05:27

+0

@granadaCoder超时时间现在是100,事实证明问题出在SQL数据库而不是我的代码! – btply 2013-03-06 16:16:00

回答

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 2013-02-27 11:54:20

+0

感谢您的帮助! – btply 2013-02-27 12:04:38

0

我想你应该尝试在foreach块中添加System.Threading.Thread.Sleep

+0

感谢您的回复,我试过了,但我仍然收到超时错误 – btply 2013-02-27 11:25:16

+0

您添加了多少间隔?它在'毫秒' – 2013-02-27 11:30:03

+0

我试过多个,从200到5000 – btply 2013-02-27 11:36:38