我正在研究几年前有人写过的桌面应用程序,数据库,网络服务器访问组合。我的任务是做一些优化/重构,并为这个应用程序引入新功能。我在开发Web应用程序方面经验不足,所以我很难找到下面描述的问题的解决方案,希望有人可以帮助我。
Web应用程序是用ASP和VBScript编写的,它有一些小的javascript函数,不会影响我的问题。它使用ADODB与数据库进行通信。
数据库是MS-SQLserver 2008数据库。
桌面应用程序使用.Net内置功能以C ++ / CLI编写,用于与数据库通信。有了这个应用程序,一切正常。
为了介绍一些功能,我需要向数据库中的表添加新列。使用存储过程完成主表的插入和更新。我添加了一个名为" internal"的列。类型" bit":
ALTER TABLE maintable
ADD internal bit
GO
我更改了插入和更新的存储过程,只需添加内部列和参数即可。我只做了这些改变:
在任何更改之前已经工作的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
没有数据库错误。
桌面应用程序端的一切正常。如上所述,直接在数据库中执行的存储过程将正常工作。我想错误是在网页脚本中的某个地方。所以现在这里是具体的问题:
sqlcmd.Execute
停止工作?存储过程中的try-block包括" AS BEGIN"之间的所有内容。和"结束"在" END"之前直接使用catch-block。语法在这里也是正确的。答案 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
请检查此链接: