當我將2個參數傳遞給我的 存儲過程的Exec代碼時,我的傳統ASP頁面出現錯誤。基本上我想發送1 paremeter來涵蓋我正在尋找 的列和一個搜索字詞。例如紐約大學的imSchool。我對發送的數據進行了數據檢查,並記錄了Set.State代碼,顯示每次我選擇帶有兩個參數的SQL Query時,出現錯誤「對象關閉時不允許操作」。總是顯示。 我試圖在「While not rs.EOF」代碼行打開對象,在這裏它錯誤地沒有運氣。 我在想我的SQLQuery不好,因爲當我用相同的輸入在MSSQL中運行存儲過程時,我每次都得到一個返回表。 SQL Server 2008 R2和經典ASP。ADODB.Recordset錯誤'800a0e78' - 當我傳遞2個參數時出錯(ASP/MSSQL)
這裏是我的IF STATMENT WITH sqlquery的代碼(記住第一個1工作正常,數據從數據庫中選擇)
SQLQuery = "Exec sp_vw_InternImport"
Set rs = Server.CreateObject("ADODB.Recordset")
rs.CursorType = 3
rs.Open SQLQuery, OBJdbConnection
If filterColmn <> "" Then
SQlQuery = "Exec sp_vw_InternImport_ColID @LookUpID=N'" + filterID + "'" + ", @LookUpCol=N'" + filterID + "'"
Set rs = Server.CreateObject("ADODB.Recordset")
rs.CursorType = 3
rs.Open SQLQuery, OBJdbConnection
End If
這裏是我的存儲過程代碼
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[sp_vw_InternImport_ColID]
(
@LookUpID nvarchar (255),
@LookUpCol nvarchar (50)
)
AS
SET NOCOUNT ON
BEGIN
IF @LookUpCol = 'imYear'
SELECT * FROM v_InternImport WHERE imYear = @LookUpID
ELSE
IF @LookUpCol = 'imSchool'
SELECT * FROM v_InternImport WHERE imSchool = @LookUpID
ELSE
IF @LookUpCol = 'imDiscipline'
SELECT * FROM v_InternImport WHERE imDiscipline = @LookUpID
IF @LookUpCol = 'imDegree'
SELECT * FROM v_InternImport WHERE imDegree = @LookUpID
END
這再次感謝工作。前面的答案也是一個問題,但我關閉了頁面底部的記錄集,因此它在到達第二個IF語句之前保持關閉狀態。 – user1188287 2012-02-20 15:31:53
乾杯,讓最佳實踐代碼查看ADODB.Command對象並使用它,創建參數而不是將它們作爲原始文本傳遞 - 您擁有的是好的,不應該容易受到SQL注入的影響,但仍不是最佳實踐。 – 2012-02-21 07:53:56