【问题标题】:How to increase timeout of DataAdapter to 3 min?如何将 DataAdapter 的超时时间增加到 3 分钟?
【发布时间】:2015-09-03 18:38:09
【问题描述】:

当我使用以下方法执行查询时,我会超时。

所以我的问题是:如何将超时设置为 180 秒?

我正在使用连接来用查询结果填充数据集。

 internal static DataSet executeQuery(string queryString)
 {
     // #connection
     DataSet dataSet = new DataSet();
     string connectionString = Connection.connectionStringSQL01NavProvider();
     OleDbConnection connection = new OleDbConnection(connectionString);
     OleDbDataAdapter adapter = new OleDbDataAdapter(queryString, connectionString);

     // Open the connection and fill the DataSet. 
     connection.Open();
     try
     {
         adapter.Fill(dataSet);
         DataTable dt = new DataTable();
         dt = dataSet.Tables[0];
         DataRow dr;
         try
         {
             dr = dt.Rows[0];
         }
         catch 
         {

         }
     }
     catch (Exception ex)
     {
         Console.WriteLine(ex.Message);
         System.Windows.Forms.MessageBox.Show("Error executeQuery().! " + ex.Message);
     }

     return dataSet;
 }

【问题讨论】:

    标签: c# sql-server timeout


    【解决方案1】:

    可以设置CommandTimeoutSelectCommand

    adapter.SelectCommand.CommandTimeout = 180; // default is 30 seconds
    

    如果您无法建立与数据库的连接,并且还想增加该超时,则必须在连接字符串中执行此操作,例如(默认为 15 秒):

    "Data Source=(local);Connection Timeout=30;Initial Catalog=AdventureWorks; Integrated Security=SSPI;"
    

    请注意,您应该使用using-statement 进行连接和实现IDisposable 的其他对象,例如OleDbDataAdapter。通过这种方式,您可以确保正确处置所有非托管资源:

    internal static DataSet executeQuery(string queryString)
    {
        DataSet dataSet = new DataSet();
        string connectionString = Connection.connectionStringSQL01NavProvider();
        using (var connection = new OleDbConnection(connectionString))
        using(var adapter = new OleDbDataAdapter(queryString, connectionString))
        {
            try
            {
                adapter.Fill(dataSet); // you dont need to open/close the connection with Fill
            } catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
                System.Windows.Forms.MessageBox.Show("Error executeQuery().! " + ex.Message);
            }
        }
    
        return dataSet;
    }
    

    【讨论】:

    • 仅供参考 - connection.ConnectionTimeout = 180;不起作用,因为它是只读的。也许这已经随着时间的推移而改变了,不确定。
    • 因为它是只读的,所以这个对我有用:codeproject.com/Articles/13009/…
    猜你喜欢
    • 2021-12-25
    • 1970-01-01
    • 2013-11-16
    • 1970-01-01
    • 2016-04-26
    • 2017-10-22
    • 2015-01-16
    • 2012-11-22
    • 1970-01-01
    相关资源
    最近更新 更多