我使用“Microsoft SQL Server Native Client 11.0”从Classic ASP调用SQL Server存储过程。多年来我一直这样做。我刚刚开发了一个存储过程,该过程利用PRINT语句在开发期间以及从MSSMS调用时提供信息性消息。但是,当我通过SQL Server Native Client从Classic ASP调用相同的存储过程时,出现0x80040e14错误,错误代码中出现第一个PRINT语句中的文本。
我已经搜索过该问题,但无法找到它说你无法做到的任何地方,所以我想知道我是否在某个地方错过了一个技巧。任何人都能指出我不能包含PRINT语句的证据(嘘!)或者我是否在做傻事?
例外:
第71行第3行的未处理异常 http:// localhost:3000 / DataAccess / Workpalces.asp
0x80040e14 - Microsoft SQL Server Native Client 11.0:---- START Assessment.RefreshUP ----
我的(删节)存储过程:
CREATE PROCEDURE Assessment.RefreshUP
@OrgID int,
@UserID int = NULL,
@BaseDate smalldatetime = NULL
AS
BEGIN
SET NOCOUNT ON
DECLARE @Error int
DECLARE @RowCount int
BEGIN TRY
PRINT '---- START Assessment.RefreshUP ----'
(snip)
我的经典ASP通话:
' Assessment.RefreshUP
' ========================
' Creates or updates a Workplace
Function Assessment_RefreshUP(rs, OrganisationID, UserID)
Stop
Dim cmd
Set cmd = Server.CreateObject("ADODB.Command")
Set rs = Server.CreateObject("ADODB.Recordset")
cmd.ActiveConnection = DBConnString
cmd.CommandType = adCmdStoredProc
cmd.CommandText = "Assessment.RefreshUP"
cmd.Parameters.Append cmd.CreateParameter("@OrgID", adInteger, adParamInput, 0, OrganisationID)
cmd.Parameters.Append cmd.CreateParameter("@UserID", adInteger, adParamInput, 0, UserID)
' cmd.Parameters.Append cmd.CreateParameter("@BaseDate", adDate, adParamInput, 0, Null)
rs.CursorLocation = adUseClientBatch
rs.Open cmd, , adOpenStatic, adLockReadOnly
Set rs.ActiveConnection = Nothing
Set cmd = Nothing
End Function
答案 0 :(得分:1)
通过查看异常代码(0x80040e14)并且不依赖于异常文本(" ---- START Assessment.RefreshUP ----"),可以找到问题的根源。
就我而言,问题是在存储过程中进一步向下调用用户定义函数(UDF)并不存在。但是,PRINT语句的存在已经影响了Exception" text"并把我带到了错误的道路上。
您可以在存储过程中使用PRINT语句,这些语句是从Classic ASP / SQL Server Native Client调用的。
如果遇到问题,请尝试直接从MSSMS调用存储过程,理想情况下使用从SQL事件探查器捕获的SQL,以确定问题的真正来源。