这是我的存储过程,当我从我的经典ASP代码调用它时,我收到错误:
关闭对象时不允许操作。
当我尝试记录计数时。
有谁知道这里有什么问题?
我正在尝试返回表格@t
。
感谢。
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经典代码
selectNewHireWorkPeriodsSQL = "EXEC sp_selectNewHireWorkPeriodsSQL"
Set rsNewHireWorkPeriods = Server.CreateObject("ADODB.Recordset")
rsNewHireWorkPeriods.Open selectNewHireWorkPeriodsSQL,ConnectionString,adOpenStatic
NumOfNewHireWorkPeriods = rsNewHireWorkPeriods.RecordCount
response.write(NumOfNewHireWorkPeriods)
答案 0 :(得分:57)
在存储过程中尝试此操作:
SET NOCOUNT ON
SET ANSI_WARNINGS OFF
位于AS
的正下方。
答案 1 :(得分:1)
首先需要创建一个活动连接,并将其传递给记录集对象,如下所示:
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)
答案 2 :(得分:1)
警告可能会混淆结果。 <body ng-app="App">
// lots of html same for both desktop/mobile
<my-dir></my-dir>
// even more here
</body>
可以避免丢失SELECT结果或输出参数值。
答案 3 :(得分:1)
如果由于某种原因,存储过程没有返回结果集,为空或其他,则记录集对象将不会打开,因此:
if rs.state = adStateOpen then x = rs.recordcount
答案 4 :(得分:0)
我确信这不会影响很多人,但是我偶然发现了这个问题。这是在生产环境中工作,而不是在开发环境中工作。我发现我们的存储过程在开发环境中具有打印语句。我猜打印声明正在整理工作,而ADODB认为那是记录集。
答案 5 :(得分:0)
我知道这已经很老了。但是在我的情况下,这是参数的顺序。在设置了存储过程中出现的参数后,它就起作用了。我知道对参数进行命名并没有逻辑上的解释,顺序实际上并不重要。
答案 6 :(得分:0)
这可能是由存储过程中的一条打印语句引起的。在进行性能调试后,我不小心留下了一些信息。...希望这可以帮助仍在旧ADO中工作的人。