我正在使用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秒来操作数据条目,永远不会发生超时。)
正确理解?
答案 0 :(得分:10)
您可以设置的命令超时适用于您为ADO.NET执行其工作的时间。
如果你调用cmdQuery.ExecuteNonQuery()
除了执行SQL语句之外什么都不返回,那么就是执行该语句所需的时间。
如果您致电cmdQuery.ExecuteReader()
并返回数据阅读器,那么ADO.NET需要时间来构建/构建该数据阅读器,以便您可以使用它。
如果您调用返回单个标量值的cmdQuery.ExecuteScalar()
,则执行查询并获取该单个结果所需的时间。
如果使用dataAdapter.Fill()
填充数据表或数据集,则需要ADO.NET检索数据然后填充数据表或数据集所需的时间。
总体而言:超时适用于ADO.NET可以执行的作业部分 - 执行语句,填充数据集,返回标量值。
当然,不适用于您迭代结果所需的时间(如果是数据读取器)。那根本没有意义......
马克
答案 1 :(得分:2)
是的,你是对的。 CommandTimeout表示数据库执行命令所需的时间(任何命令)