Il s'agit de ma procédure stockée et lorsque je l'appelle à partir de mon code ASP classique, j'obtiens l'erreur
L'opération n'est pas autorisée lorsque l'objet est fermé.
quand j'essaie de faire un compte record.
Est-ce que quelqu'un sait ce qui ne va pas ici?
J'essaie de renvoyer 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)
Essayez ceci dans votre procédure stockée:
SET NOCOUNT ON
SET ANSI_WARNINGS OFF
Juste en dessous de la AS
.
Vous devez d'abord créer une connexion active et la transmettre à 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)
Si, pour une raison quelconque, la procédure stockée ne renvoie pas de résultat, vide ou non, l'objet de jeu d'enregistrements ne sera pas ouvert.
if rs.state = adStateOpen then x = rs.recordcount
Les avertissements peuvent confondre le résultat. SET ANSI_WARNINGS OFF
évite de perdre le résultat de SELECT ou les valeurs des paramètres de sortie.
Je suis sûr que cela ne touchera pas beaucoup de gens, mais je suis tombé par hasard sur cette question. Cela fonctionnait dans la production et non dans l'environnement de développement. Ce que j'ai trouvé, c'est que notre procédure stockée avait une instruction print dans l'environnement de développement. J'imagine que la déclaration imprimée déblayait les travaux et ADODB pensait que c'était le record établi.