これは私のストアドプロシージャであり、従来の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)
ストアドプロシージャでこれを試してください。
SET NOCOUNT ON
SET ANSI_WARNINGS OFF
AS
のすぐ下。
最初にアクティブな接続を作成し、これを次のようにレコードセットオブジェクトに渡す必要があります。
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)
何らかの理由でストアドプロシージャが結果セットを返さない場合、空またはその他の場合、レコードセットオブジェクトは開かれません。
if rs.state = adStateOpen then x = rs.recordcount
警告は結果を混乱させる可能性があります。 SET ANSI_WARNINGS OFF
は、SELECT結果または出力パラメーター値の損失を防ぎます。
これは非常に古いことを知っています。しかし、私の場合、パラメータの順序。ストアドプロシージャに表示されるパラメーターを設定した後、機能しました。パラメーターに名前が付けられ、順序は実際には重要ではないので、これには論理的な説明がないことを知っています。
これは多くの人々に影響を与えないと確信していますが、私はこの問題につまずいただけです。これは、開発環境ではなく運用環境で機能していました。私が見つけたのは、開発環境でストアドプロシージャにprintステートメントが含まれていることです。印刷文が作品を台無しにしていると推測し、ADODBはそれがレコードセットだと考えました。