当运行SP超过30秒时,超时到期

时间:2019-01-10 14:49:55

标签: c# asp.net

我有一个运行45秒1分钟的sp,但是它给我错误消息Timeout expired。在操作完成之前超时或服务器没有响应。我已将Connect Timeout = 120添加到连接字符串,但这没有帮助。我还将IIS应用程序池更改为2分钟后超时。

<add name="Oconnection" connectionString="Data Source=servername;Initial Catalog=dmName; User ID=username; Password=pw; Connect Timeout=120" />

这是我的CS文件:

  string Oconnection=ConfigurationManager.ConnectionStrings["Oconnection"].ConnectionString;



 public DataSet CreateTable()
    {
        DataSet dsCreateTable;
        dsCreateTable = SqlHelper.ExecuteDataset(Oconnection, CommandType.StoredProcedure, "usp_CreateTables");
        return dsCreateTable;
    }

我是否还需要在CS文件中添加超时?

1 个答案:

答案 0 :(得分:6)

Connect Timeout连接到sql服务器的时间限制。

您想要的是CommandTimeout,这是运行命令(查询,存储过程等)的超时时间

https://docs.microsoft.com/en-us/dotnet/api/system.data.sqlclient.sqlcommand.commandtimeout?view=netframework-4.7.2

您需要在CommandTimeout对象上设置SqlCommand属性,无法在连接字符串中进行设置。

您可以像这样在代码中使用它:

public DataSet CreateTable()
{
    using(var conn = new SqlConnection(Oconnection))
    {
       conn.Open();
       using(var command = new SqlCommand())
       {
          command.Connection = conn;
          command.CommandTimeout = 120; // higher if needed
          command.CommandType = CommandType.StoredProcedure;
          command.CommandText = "usp_CreateTables";
          var da = new SqlDataAdapter();
          da.SelectCommand = command;
          var ds = new DataSet();
          da.Fill(ds);

          return ds;
      }
   }
}