ADO.NET在执行耗时的操作时,容易出现以下错误:
---------------------------
Timeout expired.
The timeout period elapsed prior to completion of the operation or the server is not responding.
---------------------------
这里需要注意的是
SqlCommand.CommandTimeout 和 SqlConnection.ConnectionTimeout是不同的概念,且通常需要我们自定义设置。
区别如下:
SqlCommand.CommandTimeout
获取或设置在终止执行命令的尝试并生成错误之前的等待时间。
等待命令执行的时间(以秒为单位)。默认为 30 秒。
SqlConnection.ConnectionTimeout
获取在尝试建立连接时终止尝试并生成错误之前所等待的时间。
等待连接打开的时间(以秒为单位)。默认值为 15 秒。
SqlCommand.CommandTimeout 的默认值是30,通常能满足大多数程序的需求。但一旦碰到大数据量操作或耗时的操作时,就容易引发上面的错误。
解决方法较为简单:
当然,出现超时的情况还要判断是否存在脚本性能问题或数据库性能问题,则需要深入分析并优化。