无法将CommandTimeout设置为超过90秒

时间:2013-02-27 12:14:35

标签: c# asp.net

我在Visual Studio 2008中有一个用C#代码编写的asp.net Web应用程序。

我有一个SQL查询,用于查询另一台服务器上的SQL Server数据库。当我运行查询时,它会在90秒后超时。我尝试了各种不同的设置。

我已经在网上搜索但仍无法找到答案。我的代码中有一行为查询设置CommandTimeout。如果我将其设置为CommandTimeout = 1;,则查询将在1秒后超时,如果我将其设置为CommandTimeout = 90;,则查询将在90秒后超时。

这一切都很好,但我的查询需要大约。 150秒运行。如果我将代码更改为CommandTimeout = 200;,则查询在90秒后仍会超时。似乎我只能在小于90秒时更改超时。 90秒以上的任何时间都会在90秒时超时。

这让我很生气。是否有其他设置覆盖我的代码?

这是我的代码

// bind the data to the Gridview
private void BindTaskList()
{
    string startDate = StartDate.Text;
    string endDate = EndDate.Text;

    // Create a connection string referring to the connection string from web.config file
    string conStr = ConfigurationManager.ConnectionStrings["Docupro_ReportingConnectionString"].ConnectionString;

    SqlConnection sqlConnection = new SqlConnection(conStr);

    // This is the SQL query and must be in one long line
    SqlCommand sqlCommand = new SqlCommand("SELECT T5.DisplayName AS 'User', T2.LongName AS 'Print Type', SUM(T1.Quantity) AS 'Total Quantity', '£'+CONVERT(varchar, SUM(T1.Amount), 3) AS 'Total Cost' FROM tblTransaction T1 JOIN tblItem T2 ON T1.ItemID = T2.ItemID JOIN tblLedger T3 ON T1.LedgerID = T3.LedgerID JOIN tblTender T4 ON T1.TenderID = T4.TenderID JOIN tblCustomer T5 ON T4.CustomerID = T5.CustomerID JOIN tblTerminal T6 on T1.TerminalID = T6.TerminalID JOIN tblStation t7 on T6.StationID = t7.StationID WHERE (TransactionDateTime BETWEEN @StartDate AND @EndDate)AND T3.LongName = 'Not Assigned' GROUP BY T5.DisplayName, T2.LongName ORDER BY T5.DisplayName", sqlConnection);

    // Create the parameters from the text boxes and drop down list
    sqlCommand.Parameters.Add(new SqlParameter("@StartDate", startDate));
    sqlCommand.Parameters.Add(new SqlParameter("@EndDate", endDate));

    // Set the command timeout to 200 seconds to allow for long queries
    sqlCommand.CommandTimeout = 200;
    sqlConnection.Open();

    // Create a DataSet to fill with data
    SqlDataAdapter myAdapter = new SqlDataAdapter(sqlCommand);
    DataSet myDataSet = new DataSet();
    myAdapter.Fill(myDataSet);

    // Turn off GridView Footer
    GridView1.ShowFooter = false;

    // Fill the GridView with the DataSet
    GridView1.DataSource = myDataSet;
    GridView1.DataBind();
}

非常感谢期待

安迪

错误信息是:

  

Sys.WebForms.PageRequestManagerTimeoutException:服务器请求超时   的ScriptResource.axd
  代码:0

4 个答案:

答案 0 :(得分:6)

错误消息显示超时来自ASP.NET(而不是来自ADO.NET)。设置Server.ScriptTimeout=200

解释错误消息是调试任何错误的第一步。当你读“超时”时不要停止。阅读并解释一切。

答案 1 :(得分:2)

... FWITW

我有一个错误(不是ASP相关 - 这是在控制台应用程序中)我发现在设置任何参数后设置CommandTimeout 似乎没有生效(即使属性是更新。)

例如

SqlCommand comm = new SqlCommand(conn, proc);
comm.Parameters.AddWithValue("@a",123);
comm.CommandTimeout = 300;
comm.ExecuteReader(); //Times out at 30 seconds

SqlCommand comm = new SqlCommand(conn, proc);
comm.CommandTimeout = 300;
comm.Parameters.AddWithValue("@a",123);
comm.ExecuteReader(); //Times out at 300 seconds

我确实有一个函数返回SqlCommand然后它在返回时被执行,但我猜测这个简化版本会有相同的结果。

总结

尝试在新建SqlCommand后立即设置CommandTimeout属性。

答案 2 :(得分:0)

您是否尝试将其设置为0

说明

  

值为0表示没有限制,应该在CommandTimeout中避免,因为尝试执行命令将无限期地等待。

Here's参考。

答案 3 :(得分:0)

SQLcommand中存在TimeOut 并在SqlConnection中存在TimeOut

{YARA}r57shell_php_php