2017-01-10 30 views
0

我有一箇舊的Web應用程序,使用VBScript與SQL Server 2008數據庫的IIS6服務器上構建的。它處於被移動到IIS8上的新服務器的狀態。ADODB命令參數刷新不檢索參數

與存儲過程中,與我們從來沒有問題的應用程序工作的每個查詢。但在新的服務器上,它似乎不起作用。我發現它是因爲Command.Parameters.Refresh沒有正確返回參數。

考慮以下代碼:

Set cmd = Server.CreateObject("ADODB.Command") 
cmd.ActiveConnection = conn 
cmd.CommandType = 4 
cmd.CommandText = v_strSpName 
cmd.CommandTimeout = 0 
cmd.Parameters.Refresh 

For i = LBound(v_arrParameters) To UBound(v_arrParameters) 
    If m_bReplaceEmptyToNull Then 
     v_arrParameters(i)(1) = ReplaceEmpty(v_arrParameters(i)(1)) 
    End If 

    cmd.Parameters(v_arrParameters(i)(0)).value = v_arrParameters(i)(1) 
Next 

v_arrParameters一切都存在,但我試過後刷新迭代中Parameters.name,不返回的參數(但他們是在生產服務器上)。

另外值得注意的,SQL事件探查器確實接收到查詢並返回參數:

exec [Database]..sp_procedure_params_rowset N'get_company',1,N'dbo',NULL 

this page,這是一個已知的問題,我只是想確保它不是來自這個問題,並找到一個解決方案或替代方案,並不意味着應用程序的完整重寫。

而且,不,我不能更新SQL Server版本,切換到VB.NET,總是有問題,有一個客戶端,將不支付這個問題。

+0

對不起,我錯過了在那裏該頁面聲明這是一個已知的問題?我可以看到你形容爲*「已知問題」最接近的*爲*「Parameters.refresh **會在某些情況下失敗**或返回是不完全正確的信息。」 *。什麼情況,它沒有說。就我個人而言,我不會使用'.Refresh()',因爲在使用此方法之前,我在提供程序中遇到問題。 – Lankymart

+0

@Lankymart這就是我在談論這個「已知的問題」,而不是說的情況是非常無益的。你用什麼來代替'.Refresh()'? –

回答

0

所以我們設法使它以這種方式工作:

  • 打開IIS管理器應用程序池部分。
  • 在默認的應用程序池(它的名字在這裏,也許並不適合所有人,我不知道)
  • 設置Enable 32-bits apps的高級設置要True

這是在64位Windows Server 2012 R2,Microsoft SQL Server 2008(SP4) - 10.0.6241.0(X64)。