2

ストアド プロシージャは正しく動作しています。しかし、私はそれを取り戻すことができません。

ストアド プロシージャから値を取得する現在の関数は次のとおりです。

    public static int GetCsStatus()
    {
        using (Entities db = new Entities())
        {
            System.Data.Objects.ObjectParameter s = new System.Data.Objects.ObjectParameter("Status", typeof(int));
            int r = db.proc_CsStatus(120, s);//.ToString());
            return r;
        }
    }

これが変更されても、まったく使用されなくてもかまいません。0 または 1 を期待しているときに、現在 -1 の "r" 値を取得しています。

これが私のストアドプロシージャです:

    USE [DATABASE_CS]
    GO

    SET ANSI_NULLS ON
    GO

    SET QUOTED_IDENTIFIER ON
    GO

    ALTER PROCEDURE [dbo].[proc_CsStatus]
        -- Add the parameters for the stored procedure here
        @TimeLimit Int,
        @Status Int OUTPUT
    AS
    BEGIN
        -- SET NOCOUNT ON added to prevent extra result sets from
        -- interfering with SELECT statements.
        SET NOCOUNT ON

        -- Declare variables.
        DECLARE @LastUpdate Int

        -- Calculate the LastUpdate.
        SELECT @LastUpdate = DATEDIFF(second, Timestamp, CURRENT_TIMESTAMP)
        FROM Heartbeat
        WHERE Id=1

        -- Compare it to the TimeLimit.
        IF @LastUpdate > @TimeLimit SELECT @Status = 0
        ELSE SELECT @Status = 1
    END
    GO

どんな入力でも大歓迎です!!!

4

1 に答える 1

4

プロシージャを実行するObjectParameter sと、値が含まれます。プロシージャ コールはそれを返しません。探している値は で見つかるはずですs.Value

次のことを試してください。

public static int GetCsStatus()
{
    using (Entities db = new Entities())
    {
        System.Data.Objects.ObjectParameter s = new System.Data.Objects.ObjectParameter("Status", typeof(int));
        int r = db.proc_CsStatus(120, s);
        return (int)s.Value;
    }
}

返される値 ( r) は、プロシージャによって影響を受ける行の数です。

より詳しい情報:

舞台裏では、プロシージャは次の行に沿って何かを実行しています。

return base.ExecuteFunction("proc_CsStatus", input, output);

ObjectContext.ExecuteFunction()呼び出しによって影響を受けた行数を返します。

于 2013-09-11T22:49:05.203 に答える