我有一个运行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文件中添加超时?
答案 0 :(得分:6)
Connect Timeout
是连接到sql服务器的时间限制。
您想要的是CommandTimeout
,这是运行命令(查询,存储过程等)的超时时间
您需要在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;
}
}
}