我似乎无法让 CommandTimeout 在下面的代码中工作。我将超时值设置为 1 秒只是为了测试以确保它有效,但它似乎被忽略了。SELECT 语句运行大约需要 15 秒,然后运行完成。我预计 1 秒后会发生超时异常。我在互联网上搜索了如何执行此操作的示例,但我找不到任何东西。我究竟做错了什么?
DbProviderFactory factory = DbProviderFactories.GetFactory("System.Data.SqlClient");
DataSet dataSet = new DataSet();
DbCommand command = factory.CreateCommand();
command.Connection = factory.CreateConnection();
command.Connection.ConnectionString = "Server=localhost;Database=MyDatabase;User Id=;Password=****";
command.CommandType = CommandType.Text;
command.CommandText = "SELECT * FROM table";
command.CommandTimeout = 1;
using (DbDataAdapter adapter = factory.CreateDataAdapter())
{
adapter.SelectCommand = command;
adapter.Fill(dataSet);
}
更新:
我写了一个运行时间超过 30 秒的 SELECT 命令。这也不会超时。我什至注释掉了我的 CommandTimeout 行,它仍然运行完成。因此,似乎即使是默认的 30 秒 CommandTimeout 也被忽略了。我很难过......任何帮助将不胜感激。
更新:
我想我可能已经弄清楚了。当我编写一个非常复杂的 SELECT 语句时,似乎发生了命令超时异常。我只能猜测发生了什么,使用我的简单 SELECT 命令,执行命令需要不到 1 秒的时间,但加载数据集需要额外的 15 秒。我在正确的轨道上吗?这看起来有可能吗?