我对查询有一个令人沮丧的问题,通常需要1.5-2分钟才能运行(由于缺乏修改此数据库的能力,我们无法比这次更多地改进它)。尽管Command Timeout属性设置为0(这是C#代码),查询超时。
以下是执行查询的代码:
public DataTable GetData()
{
DataTable results = new DataTable();
try
{
using (var sqlConnection = new SqlConnection(ConfigurationManager.AppSettings["SqlConnectionString"].ToString()))
{
String command = _query;
sqlConnection.Open();
var sqlCommand = sqlConnection.CreateCommand();
sqlCommand.CommandText = command;
sqlCommand.CommandType = CommandType.Text;
sqlCommand.CommandTimeout = 0;
SqlDataAdapter daM = new SqlDataAdapter(sqlCommand.CommandText, sqlConnection);
daM.Fill(results);
sqlConnection.Close();
}
}
catch(Exception e)
{
Console.WriteLine("Error " + e.StackTrace);
}
Console.WriteLine("Retrieving results for query " + _query);
Console.WriteLine("Total Results: " + results.Rows.Count);
return results;
}
我不知道在哪里寻找罪魁祸首。设置更明确的超时没有任何作用,正如我所说,没有办法进一步改进我们能够找到的查询。连接字符串具有以下参数:
server =
集成安全性= SSPI
database =
连接超时= 0
关于我接下来要去哪看的任何建议?我们正在使用Microsoft SQL Server。
答案 0 :(得分:11)
您已设置sqlCommand.CommandTimeout
,但稍后您已将SqlDataAdapter
创建为
SqlDataAdapter daM = new SqlDataAdapter(sqlCommand.CommandText, sqlConnection)
此处适配器隐式创建并使用 new SqlCommand
(不是您配置的那个),因为您已经传递了命令文本,而不是SqlCommand
的实例。< / p>
使用SqlDataAdapter
的另一个构造函数并将其创建为
SqlDataAdapter daM = new SqlDataAdapter(sqlCommand)
答案 1 :(得分:1)
在SqlConnection上设置超时在您的情况下不起作用,您需要在SqlDataAdapter上执行此操作。
daM.SelectCommand.CommandTimeout = Value;
谷歌“如何更改SqlDataAdapter .CommandTimeout?”