C# 使用DbDataAdapter.Fill忽略CommandTimeout

C# 使用DbDataAdapter.Fill忽略CommandTimeout,c#,connection-timeout,command-timeout,sqldatadapter,C#,Connection Timeout,Command Timeout,Sqldatadapter,在下面的代码中,我似乎无法使用CommandTimeout。我将超时值设置为1秒只是为了测试以确保它工作,但它似乎被忽略了。SELECT语句运行大约需要15秒,直到完成为止。我期望在1秒后发生超时异常。我在互联网上搜索了一个例子来说明如何做到这一点,但我没有找到任何东西。我做错了什么 DbProviderFactory factory = DbProviderFactories.GetFactory("System.Data.SqlClient"); DataSet dataSet = new

在下面的代码中,我似乎无法使用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);
}

更新: 我编写了一个SELECT命令,运行时间超过30秒。这也不会超时。我甚至注释掉了我的CommandTimeout行,它仍然运行到完成。因此,似乎连默认的CommandTimeout 30秒都被忽略了。我被难住了…任何帮助都将不胜感激


更新:
我想我可能已经弄明白了。当我编写一个非常复杂的SELECT语句时,似乎发生了命令超时异常。我只能猜测,使用我的简单SELECT命令,执行该命令的时间不到1秒,但加载数据集需要额外的15秒。我走对了吗?这看起来可能吗?

命令超时是在命令执行或处理结果期间所有网络读取的累积超时(对于在调用方法期间读取的所有网络数据包)。返回第一行后仍可能发生超时,超时不包括用户处理时间,仅包括网络读取时间

例如,在30秒超时的情况下,如果读取需要两个网络数据包,那么它有30秒的时间来读取这两个网络数据包。如果您再次调用Read,它将有30秒的时间读取所需的任何数据

注:

当针对上下文连接(连接字符串中使用“context connection=true”打开的SqlConnection)执行命令时,或者在异步方法调用(如BeginExecuteReader)期间使用命令时,CommandTimeout无效。

注意:这是从