【问题标题】:Query Multiple Databases SQL Server查询多个数据库 SQL Server
【发布时间】:2013-02-27 11:05:01
【问题描述】:

我在 Azure SQL Server 上跨多个数据库运行查询时遇到问题。这是我在执行后从查询中返回 DataTable 的函数。该函数将数据库名称作为字符串并将其与要执行的查询一起插入到连接字符串中。

该函数在我运行一次时运行良好,按预期返回填充了返回行的 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 ID=user@server;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;
        }

    }
}

【问题讨论】:

  • 将 CommandTimeout 设置为 0 意味着“无限”。也许可以试试 600,也就是 10 分钟。 (或对您的问题有意义的东西)。 “无限”是很长一段时间......只是一个建议。
  • @granadaCoder 现在超时为 100,原来问题出在 SQL 数据库上,而不是我的代码!

标签: c# .net sql-server azure sqlconnection


【解决方案1】:

添加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();

            }

【讨论】:

  • @Btop 你能把它标记为答案,希望你的问题得到解决
【解决方案2】:

我认为您应该尝试在 foreach 块中添加 System.Threading.Thread.Sleep

【讨论】:

  • 感谢您的回复,我已经尝试过了,但我仍然收到超时错误
  • 你加了多少间隔?它在Milliseconds
  • @vikas 感谢您的帮助!这行得通,但是只查询 3 个数据库(20 秒以上)需要很长时间,它们是相当大的数据库,但我只查询两个表。有什么提高速度的建议吗?
猜你喜欢
  • 2022-01-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多