加入收藏 | 设为首页 | 会员中心 | 我要投稿 济源站长网 (https://www.0391zz.cn/)- 数据工具、数据仓库、行业智能、CDN、运营!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

sql-server-2005 – 过程从ADO.NET中超时,但在SSMS中没有

发布时间:2021-02-24 19:04:34 所属栏目:MsSql教程 来源:网络整理
导读:我有一个存储过程给我一个SqlException,因为我从代码运行它时超时(超时设置为30).当我直接在Management Studio中运行该过程时,它会在1秒内执行.我也只在针对特定数据库运行时获得超时.当我使用其他数据库时,它可以快速完成而不会出现错误.这是完整的错误消息

我有一个存储过程给我一个SqlException,因为我从代码运行它时超时(超时设置为30).当我直接在Management Studio中运行该过程时,它会在1秒内执行.我也只在针对特定数据库运行时获得超时.当我使用其他数据库时,它可以快速完成而不会出现错误.这是完整的错误消息:

System.Data.SqlClient.SqlException (0x80131904): Timeout expired.  The timeout period elapsed prior to completion of the operation or the server is not responding.
   at System.Data.SqlClient.SqlConnection.OnError(SqlException exception,Boolean breakConnection)
   at System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception,Boolean breakConnection)
   at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning()
   at System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior,SqlCommand cmdHandler,SqlDataReader dataStream,BulkCopySimpleResultSet bulkCopyHandler,TdsParserStateObject stateObj)
   at System.Data.SqlClient.SqlDataReader.ConsumeMetaData()
   at System.Data.SqlClient.SqlDataReader.get_MetaData()
   at System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds,RunBehavior runBehavior,String resetOptionsString)
   at System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior,Boolean returnStream,Boolean async)
   at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior,String method,DbAsyncResult result)
   at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior,String method)
   at System.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior behavior,String method)
   at System.Data.SqlClient.SqlCommand.ExecuteDbDataReader(CommandBehavior behavior)
   at System.Data.Common.DbCommand.System.Data.IDbCommand.ExecuteReader(CommandBehavior behavior)

这个堆栈跟踪对任何人都意味着什么?看起来我的sproc可能已经完成了,并且在尝试读取某种元数据时超时了?

我尝试在运行过程中查看该进程并将其暂停. sys.dm_os_waiting_tasks将等待类型显示为IO_COMPLETION,如果有任何用途的话.我在数据库中使用sp_who2’active’看到的唯一进程是一次超时和我的活动SSMS窗口,所以我不认为这是一个阻塞问题.我验证了这个数据库与工作数据库具有相同的权限,并运行dbcc checkdb而没有任何错误.如何确定超时的原因?

解决方法

您可以将超时的会话的SET选项与不是的会话的SET选项进行比较:
SELECT
    session_id,[ansi_defaults],[ansi_null_dflt_on],[ansi_nulls],[ansi_padding],[ansi_warnings],[arithabort],[concat_null_yields_null],[deadlock_priority],[quoted_identifier],[transaction_isolation_level]
FROM
    sys.dm_exec_sessions
WHERE
    session_id IN (<spid1>,<spid2>);

当您发现一些不同的情况时,请尝试将每个设置更改为SSMS查询中的相反设置,直到获得超时(或在发送查询之前手动设置应用程序代码中的选项).现在,我没有方便的2005实例,所以没有测试过这个查询.您可能需要注释掉一个或多个列名称.

(编辑:济源站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读