2010-04-19 96 views
1

我在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

回答

0

在我看來,該存儲過程已經改變,並返回一個標量,而不是一個結果集。

更改CommandType = 1(adCmdText)需要與您的查詢匹配更改爲SELECT 'whateveryouwannatry' AS [updated]

由於您聲明沒有任何內容改變,我們可以通過指定輸出參數來排除命令/ sproc的返回類型。

+0

對spocs也沒有改變。上個星期我改變了一個不同站點的配置設置,但是這個站點一直運行未經修改 - 字面上 - 年。 – justSteve 2010-04-21 15:33:13