当执行存储过程
“当对象关闭时不允许操作”这是我的存储过程,当我从我的经典ASP代码调用它,我得到的错误:当执行存储过程
Operation is not allowed when the object is closed.
时我尝试做一个记录计数。
有人知道这里有什么问题吗?我想返回表@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)
您需要先创建活动连接,并把它传递给Recordset对象,像这样:
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)
我以为ADO的Recordset Open方法会隐式地打开一个连接,如果只传递了一个连接字符串。 – 2013-05-16 04:26:47
@G。斯托涅涅夫,只是检查了文件,似乎你是对的。 – johna 2013-05-16 07:38:57
试试这个在您的存储过程:
SET NOCOUNT ON
SET ANSI_WARNINGS OFF
正下方的AS。
设置nocount为我们做了 – Slider345 2013-12-17 23:55:11
这解决了一个问题,我从使用BarTender软件打印标签的过程中获得结果集。 (我有同样的错误) – Chris 2014-02-25 21:40:46
太棒了!工作顺利! – MarceloBarbosa 2014-12-09 19:32:57
警告可能会混淆结果。 SET ANSI_WARNINGS OFF避免丢失SELECT结果或输出参数值。
如果出于某种原因存储过程不返回结果集,空或否则,Recordset对象不会是公开的,所以:
if rs.state = adStateOpen then x = rs.recordcount
我的测试结果不符合这个建议。 – Maritim 2016-08-26 10:25:38
我指的是Microsoft SQL Server的。 – omega 2013-05-13 18:52:31
由于错误显然在调用代码中 - 您需要向我们显示代码**调用**此存储过程.... – 2013-05-13 18:53:07
备注:您应该**不要**为您的存储使用'sp_'前缀程序。微软已经保留了这个前缀以供自己使用(参见*命名存储过程*)](http://msdn.microsoft.com/en-us/library/ms190669%28v=sql.105%29.aspx),以及你将来有可能冒着名字冲突的风险。 [这对你的存储过程性能也是不利的](http://www.sqlperformance.com/2012/10/t-sql-queries/sp_prefix)。最好只是简单地避免使用'sp_'并将其他内容用作前缀 - 或者根本没有前缀! – 2013-05-13 18:53:23