0

我正在使用freeodbc++库来访问 MS SQL Server 2000 数据库(SP3?SP4?)上的数据。特别是,我正在运行一个特别长且令人讨厌的存储过程。我可以在 SQL Profiler 中观看该过程的执行,但是,它往往会在某个点停止处理。没有错误代码或异常抛出。如果我注释掉始终是最后一个语句的嵌套语句,它只会在注释之前稍微结束。我没有尝试从根本上评论整个该死的事情......我将查询超时设置为 300 秒。可调用语句通常会在 1 秒内返回,而不会真正完成 SP。

有任何想法吗?

UPDATE0:如果我通过查询分析器或其他工具运行 SP……它可以工作。只是通过我的 ODBC 连接失败了。

UPDATE1:当我注释掉代码时,执行会进一步进入 SP。让我觉得我遇到了超时或缓冲区限制。

4

4 回答 4

0

从查询分析器运行该过程,看看会发生什么。您可以在过程中使用 RAISERROR() 函数将跟踪信息提供回消息窗口以帮助您进行调试。

于 2008-10-15T20:21:04.227 回答
0

您是否尝试过使用 TRY 和 CATCH?它可能会在您的存储过程中的函数调用上引发您看不到的错误。

BEGIN TRY
 <Your code>
END TRY
BEGIN CATCH
        DECLARE @ErrMsg nvarchar(max),
            @ErrSeverity int,
            @ErrState int
    SELECT  @ErrMsg = ERROR_MESSAGE(),
            @ErrSeverity = ERROR_SEVERITY(),
            @ErrState = ERROR_STATE()

    RAISERROR (@ErrMsg,@ErrSeverity,@ErrState);
END CATCH
于 2008-10-15T20:43:06.833 回答
0

您是否尝试过在 SQL Server 端进行分析,以查看您的 SPID 发生了什么?

另外,我没有使用过freeodbc++,但也许里面有一个它不喜欢的PRINT 语句。您还可以 SET NOCOUNT ON 来抑制行计数消息。同样,这取决于 freeodbc++ 如何对这些“信息”消息作出反应。

根据您描述的这种“冻结”行为方式,这听起来像是 freeodbc++ 中的一个错误。首先检查 SQL 端的进程,看看它是否真的挂起,或者你的库是否只是“死”在你身上。

于 2008-10-15T22:21:10.770 回答
0

添加“::睡眠(30000);” 在我对 ODBC 语句对象调用执行之后(以及在语句关闭命令之前)立即阻止服务器进程过早退出。一定是 freeodbc++ 的错误或我的配置错误。

感谢您提供故障排除/调试提示。

于 2008-10-17T12:55:54.763 回答