29

これは私のストアド プロシージャであり、従来の 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)
4

7 に答える 7

72

ストアド プロシージャでこれを試してください。

SET NOCOUNT ON
SET ANSI_WARNINGS OFF

のすぐ下AS

于 2013-05-17T20:47:11.140 に答える
1

警告によって結果が混乱する場合があります。SET ANSI_WARNINGS OFFSELECT の結果または出力パラメータ値が失われるのを回避します。

于 2015-10-23T13:16:40.670 に答える
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)
于 2013-05-16T03:03:30.737 に答える
0

これは、ストアド プロシージャの print ステートメントが原因である可能性があります。パフォーマンスのデバッグを行った後、誤っていくつかを残してしまいました....これが、レガシー ADO でまだ作業している誰かの助けになることを願っています。

于 2020-02-18T19:06:31.877 に答える