0

SQL Management で実行すると正しい答えを返す SQL の関数があります。これは私の関数です。

ALTER FUNCTION [dbo].[Dore1] 
    (@First NVARCHAR(50), @second NVARCHAR(50))
RETURNS INT
AS
BEGIN
    DECLARE @Tedad INT

    SET @tedad = (SELECT COUNT(sh_gharardad)
                  FROM OrgGharardad
                  WHERE OrgGhAghdDate BETWEEN @First
                  AND @second)

    RETURN @Tedad
END

しかし、C# プログラムで使用すると、このコードで 0 (ゼロ) の値が返されます。どこに間違って書きましたか?

int dore1, dore2;
        ConnectDb Contact = new ConnectDb();
        Contact.connect();
        SqlCommand Cmd = new SqlCommand("dore1", cnn);
        SqlCommand Cmd2 = new SqlCommand("dore2", cnn);
        Cmd.CommandType = CommandType.StoredProcedure;
        Cmd2.CommandType = CommandType.StoredProcedure;
        cnn.Open();

        Cmd.Parameters.AddWithValue("@First", txt_1_aghaz.Text);
        Cmd.Parameters.AddWithValue("@Second", txt_1_payan.Text);

        dore1=Convert.ToInt32( Cmd.ExecuteScalar());



        Cmd2.Parameters.AddWithValue("@First2", txt_2_aghaz.Text);
        Cmd2.Parameters.AddWithValue("@second2", txt_2_payan.Text);

        dore2= Convert.ToInt32( Cmd2.ExecuteScalar());

        CreateChart(dore1, dore2);
        cnn.Close();
4

4 に答える 4

1

ExecuteScalar は、関数が返すものではない 1 列、1 行の結果セットを期待しています。スカラー結果で実際に取得しているのは、影響を受ける行の COUNT 値です。

プロシージャと関数の違いについては、こちらを ご覧ください http://www.codeproject.com/Tips/286539/Difference-between-stored-procedure-and-function

そして、execute scalar が機能するためには、関数の結果を SELECT するために何かをする必要があります。

于 2013-08-17T12:37:40.497 に答える
0

この変更により完了: SqlCommand Cmd = new SqlCommand("Select dbo.dore1(@First, @Second)", cnn);

関数を直接呼び出すことはできず、ストアド プロシージャではありません

終わり

于 2013-08-17T21:20:24.750 に答える