ADO.Net DataReader 超时问题
我正在使用 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 秒来操作数据条目,超时永远不会发生)。
理解正确吗?
I am using ADO.Net + C# + VSTS 2008 + ADO.Net to connect to SQL Server 2008 Enterprise. I am using almost the same pattern/sample mentioned here -- using ADO.Net DataReader to retrieve data one entry (row) by one entry (row).
http://msdn.microsoft.com/en-us/library/haa3afyz.aspx
My question is, if I set the SqlCommand timeout in this sample,
1. I think the timeout applies to how much time we could use as maximum value to retrieve one specifc row, not the total timeout for the whole data entry-by-entry loop?
BTW: loop I mean,
while (reader.Read())
{
Console.WriteLine("{0}\t{1}", reader.GetInt32(0),
reader.GetString(1));
}
2.
and this timeout only matters how much time it takes to retrieve data entry from database, and this timeout has nothing to do with how much time we deal with each entry (e.g. if we set timeout to 20 seconds, and if it takes 1 second to retrieve one data entry from database, and it takes 30 seconds for my application logics to manipulate the data entry, timeout will never happen).
Correct understanding?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
您可以设置的命令超时适用于您给予 ADO.NET 完成其工作的时间。
如果您调用 cmdQuery.ExecuteNonQuery(),它不返回任何内容,但执行 SQL 语句,则为执行该语句所需的时间。
如果您调用返回数据读取器的 cmdQuery.ExecuteReader(),则 ADO.NET 需要时间来设置/构造该数据读取器以便您可以使用它。
如果您调用返回单个标量值的
cmdQuery.ExecuteScalar()
,则这就是执行查询并获取该单个结果所需的时间。如果使用
dataAdapter.Fill()
填充数据表或数据集,则这是ADO.NET检索数据然后填充数据表或数据集所需的时间。总的来说:超时适用于 ADO.NET 可以执行的作业部分 - 执行语句、填充数据集、返回标量值。
当然,它不适用于适用于您迭代结果所需的时间(对于数据读取器)。这根本没有意义……
马克
The command timeout that you can set applies to how long you give ADO.NET to do its job.
If you call
cmdQuery.ExecuteNonQuery()
which returns nothing but performs a SQL statement it's the time needed to perform that statement.If you call
cmdQuery.ExecuteReader()
which returns a data reader, it's the time needed for ADO.NET to ste up / construct that data reader so that you can then use it.If you call
cmdQuery.ExecuteScalar()
which returns a single scalar value, it's the time needed to execute the query and grab that single result.If you use the
dataAdapter.Fill()
to fill a data table or data set, it's the time needed for ADO.NET to retrieve the data and then fill the data table or data set.So overall : the timeout applies to the portion of the job that ADO.NET can do - execute the statement, fill a data set, return a scalar value.
Of course it does NOT apply to the time it takes YOU to iterate through the results (in case of a data reader). That wouldn't make sense at all...
Marc
是的你是对的。 CommandTimeout 表示数据库执行命令(任何命令)所需的时间
Yes you are right. The CommandTimeout means the Time the Database needs to execute the command (any command)