"L'opération n'est pas autorisée lorsque l'objet est fermé" lors de l'exécution de la procédure stockée

C'est ma procédure stockée, et quand je l'appelle de mes ASP classique code, j'obtiens l'erreur:

Opération n'est pas autorisée lorsque l'objet est fermé.

quand j'essaie de faire un nombre d'enregistrements.

est-ce que quelqu'un sait ce qui ne va pas ici?

je suis en train de retourner la table @t.

Merci.

USE [Hires_new]
GO
/****** Object:  StoredProcedure [dbo].[sp_selectNewHireWorkPeriodsSQL]    Script Date: 05/13/2013 14:04:12 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author:      
-- Create date: 
-- Description: 
-- =============================================
ALTER PROCEDURE [dbo].[sp_selectNewHireWorkPeriodsSQL] 
    -- Add the parameters for the stored procedure here

AS

    declare @t table (HireID int, StartDate datetime, EndDate datetime, date_initiated datetime, date_closed datetime, firmName nvarchar(100), InquiryID int)
    DECLARE @acc INT 
    SET @acc = 1
    DECLARE @max INT 
    select @max = max(HireID) from NewHire
    WHILE (@acc <= @max)
        BEGIN
            IF (@acc in (select HireID from NewHire))
                BEGIN
                    insert into @t  
                        select HireID, StartDate, EndDate, date_initiated, date_closed, firmName, Inquiries.InquiryID 
                        from WorkPeriod, Firms, Inquiries 
                        where HireID = @acc and WorkPeriod.FirmID = Firms.FirmID and WorkPeriod.InquiryID = Inquiries.InquiryID 
                        order by HireID,StartDate DESC
                END
            set @acc = @acc + 1
        END
    select * from @t

Asp classique code

selectNewHireWorkPeriodsSQL = "EXEC sp_selectNewHireWorkPeriodsSQL"
Set rsNewHireWorkPeriods = Server.CreateObject("ADODB.Recordset")
rsNewHireWorkPeriods.Open selectNewHireWorkPeriodsSQL,ConnectionString,adOpenStatic
NumOfNewHireWorkPeriods = rsNewHireWorkPeriods.RecordCount

response.write(NumOfNewHireWorkPeriods)
21
demandé sur Pondlife 2013-05-13 22:48:57

4 réponses

Essayez ceci dans votre procédure stockée:

SET NOCOUNT ON
SET ANSI_WARNINGS OFF

juste en dessous de la AS.

55
répondu Ramon 2018-09-21 10:27:25

vous devez d'abord créer une connexion active, et passer ceci à l'objet recordset, comme ceci:

Set conn = Server.CreateObject("ADODB.Connection")
conn.Open(ConnectionString)

selectNewHireWorkPeriodsSQL = "EXEC sp_selectNewHireWorkPeriodsSQL"
Set rsNewHireWorkPeriods = Server.CreateObject("ADODB.Recordset")
rsNewHireWorkPeriods.Open selectNewHireWorkPeriodsSQL,conn,adOpenStatic 'dont use connection string here
NumOfNewHireWorkPeriods = rsNewHireWorkPeriods.RecordCount

conn.Close
Set conn = Nothing

response.write(NumOfNewHireWorkPeriods)
1
répondu johna 2013-05-16 03:03:30

si, pour quelque raison que ce soit, la procédure stockée ne renvoie pas un jeu de résultats, vide ou autre, l'objet recordset ne sera pas ouvert, donc:

if rs.state = adStateOpen then x = rs.recordcount
1
répondu user3158212 2015-12-08 16:56:54

Avertissements peuvent confondre le résultat. SET ANSI_WARNINGS OFF évite de perdre les valeurs des paramètres de résultat ou de sortie.

1
répondu Sergio Abreu 2018-09-21 10:27:34