6

我正在使用 ADO.Net + C# + VSTS 2008 + ADO.Net 连接到 SQL Server 2008 Enterprise。我使用的几乎与此处提到的模式/示例相同——使用 ADO.Net DataReader 逐个条目(行)检索数据。

http://msdn.microsoft.com/en-us/library/haa3afyz.aspx

我的问题是,如果我在此示例中设置 SqlCommand 超时,1. 我认为超时适用于我们可以用作最大值来检索一个特定行的时间,而不是整个数据逐项输入的总超时环形?

顺便说一句:循环我的意思是,

while (reader.Read())
{
    Console.WriteLine("{0}\t{1}", reader.GetInt32(0),
        reader.GetString(1));
}

2. 这个超时只与从数据库中检索数据条目所需的时间有关,而这个超时与我们处理每个条目的时间无关(例如,如果我们将超时设置为 20 秒,如果它需要 1秒从数据库中检索一个数据条目,我的应用程序逻辑需要 30 秒来操作数据条目,永远不会发生超时)。

正确理解?

4

2 回答 2

10

您可以设置的命令超时适用于您让 ADO.NET 完成其工作的时间。

如果您调用cmdQuery.ExecuteNonQuery()which 只返回执行一条 SQL 语句,则它是执行该语句所需的时间。

如果您调用cmdQuery.ExecuteReader()which 返回数据读取器,那么 ADO.NET 需要时间来加速/构造该数据读取器,以便您可以使用它。

如果您调用cmdQuery.ExecuteScalar()which 返回单个标量值,则它是执行查询并获取该单个结果所需的时间。

如果使用dataAdapter.Fill()来填充数据表或数据集,则需要 ADO.NET 检索数据然后填充数据表或数据集的时间。

总体而言:超时适用于 ADO.NET 可以执行的部分作业 - 执行语句、填充数据集、返回标量值。

当然,它不适用于遍历结果所花费的时间(如果是数据阅读器)。这根本没有意义……

马克

于 2009-09-27T18:36:42.310 回答
2

是的你是对的。CommandTimeout 表示数据库需要执行命令(任何命令)的时间

于 2009-09-27T17:39:39.973 回答