【发布时间】:2019-11-07 19:37:37
【问题描述】:
我正在使用 SqlDataAdapter 从存储过程中提取结果,该过程最多需要 5 分钟才能执行并返回结果。
我正在使用一个
da.SelectCommand.CommandTimeout = 1800;
设置,但超时不起作用。该代码实际上并未兑现超时。它更早失败了。
知道如何解决这个超时问题吗?
这是我的代码:
var cpdbconn = new SqlConnection(ConfigurationManager.ConnectionStrings["SQL"].ConnectionString);
using (SqlCommand cmd = new SqlCommand())
{
cmd.Connection = cpdbconnection;
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = readStoredProcedureName;
using (SqlDataAdapter da = new SqlDataAdapter(cmd))
{
try
{
da.SelectCommand.CommandTimeout = 1800;
da.Fill(dt);
// Check datatable is null or not
if (dt != null && dt.Rows.Count > 0)
{
foreach (DataRow dataRow in dt.Rows)
{
lstring.Add(Convert.ToString(dataRow["ServerName"]));
}
}
// Add "','" in each row to convert the result to support nested query format
InnerQryResultStr = string.Join("','", lstring.ToArray());
if (multinestedQry != null)
{
combinedQry = qryName;
qryName = multinestedQry + "('" + InnerQryResultStr + "')";
}
else
{
qryName = qryName + "('" + InnerQryResultStr + "')";
}
}
catch (SqlException e)
{
Logger.Log(LOGTYPE.Error, String.Format("Inserting Data Failed for server {0} with Exception {1}", "DiscreteServerData", e.Message));
if(e.Number == -2)
{
Logger.Log(LOGTYPE.Error, String.Format("TimeOut occurred while executing SQL query / stored procedure ", "DiscreteServerData", e.Message));
}
strMsg = e.Message.ToString();
file.WriteLine(strMsg.ToString());
}
}
}
【问题讨论】:
-
"存储过程执行结果最多需要 5 分钟。"你在用 5 分钟 执行的可怜的数据库做什么?正常响应时间以毫秒为单位。为了避免这 5 分钟,可能需要进行轻微的重新设计。
-
还有一堆超时。 CommandTimeout、Connection Timeout、对端服务器超时、Slow Lorris检测等
-
StoredProdcuede 产生数百万条记录。所以预计 SP 的执行时间
标签: c# sql-server sqldataadapter