ADO.Net DataReader超时问题

时间:2009-09-27 17:33:28

标签: c# .net visual-studio-2008 ado.net sqldatareader

我正在使用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.我认为超时适用于我们可以用多长时间来检索一个特定行,而不是整个数据逐个循环的总超时?

BTW:我的意思是循环,

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

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

正确理解?

2 个答案:

答案 0 :(得分:10)

您可以设置的命令超时适用于您为ADO.NET执行其工作的时间。

如果你调用cmdQuery.ExecuteNonQuery()除了执行SQL语句之外什么都不返回,那么就是执行该语句所需的时间。

如果您致电cmdQuery.ExecuteReader()并返回数据阅读器,那么ADO.NET需要时间来构建/构建该数据阅读器,以便您可以使用它。

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

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

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

当然,适用于迭代结果所需的时间(如果是数据读取器)。那根本没有意义......

马克

答案 1 :(得分:2)

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