ASP Classic页面退出工作

问题描述:

我在IIS7服务器上运行了一组遗留页面至少一年。有时上周东西改变,现在这条线:ASP Classic页面退出工作

Response.Write CStr(myRS(0).name) & "=" & Cstr(myRS(0).value) 

其用于返回无非是字符串更精彩:“更新=真”(存储过程处理输入参数,可以将它们存储到一个表,检查错误和当这一切都完成返回通过执行该语句成功代码: 选择“真”为[更新]

现在我pageside错误处理程序参与,并提供:

myError=Error from /logQuizScore.asp 
Error source: Microsoft VBScript runtime error 
Error number: 13 
Error description: Type mismatch 

需要注意的是所有批次的页面使用相同的框架 - 相同的数据库,相同的编码格式,连接线和(据我所知)所有其他人正在工作。

Troubleshot这一点:

到存储过程的调用工作正常(的东西存储到指定的表)。存储过程的输出工作正常(我可以用给定的参数和东西执行直接调用,我可以看到分析器调用和传递,我可以用'select'true'替换所有代码'更新',错误是。同样

一切都交给上面的Response.Write说法正确的是

因此就改变了ADO是如何呈现的特定记录

所以我尝试:回复于myRS.Item.count

并得到:

错误号:424 错误描述:Object required

记录集对象似乎不是实例化的,而是命令对象_did执行。重复 - 许多其他页面只是相同的基本逻辑来击中其他sprocs没有问题。

完整的代码片段

set cmd1 = Server.CreateObject("ADODB.Command") 
cmd1.ActiveConnection = MM_cnCompliance4_STRING 
cmd1.CommandText = "dbo._usp_UserAnswers_INSERT" 
... 
cmd1.CommandType = 4 
cmd1.CommandTimeout = 0 
cmd1.Prepared = true 
set myRS = cmd1.Execute 

Response.Write CStr(myRS(0).name) & "=" & Cstr(myRS(0).value) 
+1

一个随机的想法给我留下了深刻印象 - 真的可以被解释为布尔型,因此不会被转换为字符串吗?你尝试过执行像'SELECT'hello world'AS [Updated]'吗?另外,你有没有尝试过?它可以帮助你找出为什么你会得到类型不匹配的错误... http://msdn.microsoft.com/en-us/library/ms525253.aspx – 2010-04-19 19:00:54

+0

你已经尝试更换'cmd1.CommandText =“选择'true'已更新“'和'cmd1.CommandType = 1'? '......'背后发生了什么? – Filburt 2010-04-19 19:05:50

+0

“hello world”或“select 1 as updated”都不会改变。除此之外 - 这个页面已经服务好几年了 - 代码没有改变。 fliburt的想法改变CommandType - 有趣 - 它的工作。RecordSet对象已创建并输出到reponse.write行。剪切片段的剪切部分仅仅是 - cmd1.Parameters.Append cmd1.CreateParameter(“@ Score”,3,1,4,cmd1__Score)形式的参数列表。 – justSteve 2010-04-19 20:44:56

在我看来,该存储过程已经改变,并返回一个标量,而不是一个结果集。

更改CommandType = 1(adCmdText)需要与您的查询匹配更改为SELECT 'whateveryouwannatry' AS [updated]

由于您声明没有任何内容改变,我们可以通过指定输出参数来排除命令/ sproc的返回类型。

+0

对spocs也没有改变。上个星期我改变了一个不同站点的配置设置,但是这个站点一直运行未经修改 - 字面上 - 年。 – justSteve 2010-04-21 15:33:13