使用存储过程的VBScript在引入新列时不起作用

时间:2013-09-19 12:09:39

标签: sql-server-2008 stored-procedures asp-classic vbscript adodb

我正在研究几年前有人写过的桌面应用程序,数据库,网络服务器访问组合。我的任务是做一些优化/重构,并为这个应用程序引入新功能。我在开发Web应用程序方面经验不足,所以我很难找到下面描述的问题的解决方案,希望有人可以帮助我。

Web应用程序是用ASP和VBScript编写的,它有一些小的javascript函数,不会影响我的问题。它使用ADODB与数据库进行通信。

数据库是MS-SQLserver 2008数据库。

桌面应用程序使用.Net内置功能以C ++ / CLI编写,用于与数据库通信。有了这个应用程序,一切正常。

为了介绍一些功能,我需要向数据库中的表添加新列。使用存储过程完成主表的插入和更新。我添加了一个名为" internal"的列。类型" bit":

    ALTER TABLE maintable
    ADD internal bit
    GO

我更改了插入和更新的存储过程,只需添加内部列和参数即可。我只做了这些改变:

  • 参数
  • 的1x行
  • 在插入的列和值列表中添加了内部
  • 添加了带有更新参数的内部列

在任何更改之前已经工作的vbscript中,我添加了代码,用于将internal的值作为新参数附加(对于insert和amp; update来说,它是相同的):

    sqlcmd.Parameters.Append(sqlcmd.CreateParameter("@internal",11,1))
    sqlcmd.Parameters("@internal")=0

在这些更改之后,vbscript的更新和插入过程停止工作。我为参数尝试了几种数据类型,并且还更改了列(不同的名称,不同的数据类型)。没有任何效果。直接在数据库中执行时以及桌面应用程序使用时,存储过程本身工作正常 我开始通过打印一些调试信息来调试所有内容。我在存储过程中添加了try / catch,并根据this回答在outparameter中获取了一些错误,并将所有输入参数选择到varchar out参数中。这导致了下一个奇怪的结果 在更新"工作" (因为存储过程没有导致数据库错误,并且我得到的输入参数信息没有显示错误的值,但没有执行更新)插入无法以任何方式工作。我的跟踪输出打印到sqlcmd.Execute,此行似乎崩溃,因为此行之后的跟踪输出未打印。只要我没有使用参数,插入本身就不起作用,但所有的迹线输出都被打印出来了。我尝试在执行代码后直接检索有关可能的数据库错误的信息:

    DECLARE @ErrorVariable INT;

    SET @ErrorVariable = @@ERROR;
    SELECT @ErrorVariable AS ErrorID,
        text
        FROM sys.messages
        WHERE message_id = @ErrorVariable;
    GO

没有数据库错误。

桌面应用程序端的一切正常。如上所述,直接在数据库中执行的存储过程将正常工作。我想错误是在网页脚本中的某个地方。所以现在这里是具体的问题:

  1. 为数据库添加新列(它在那里)并且存储过程或vbscript中没有语法错误时,为什么存储过程不能正常工作?
  2. 为插入存储过程添加out参数时,为什么sqlcmd.Execute停止工作?存储过程中的try-block包括" AS BEGIN"之间的所有内容。和"结束"在" END"之前直接使用catch-block。语法在这里也是正确的。

1 个答案:

答案 0 :(得分:1)

尝试在asp端捕获错误。

On Error Resume Next
sqlcmd.Execute

for each objerr in yourconnection.Errors
    Response.write objerr.Description & "<br/>"
next

On Error GoTo 0

请检查此链接:

ADO Connection Object Errors Collection