3

Entity Frameworkを使用してストアドプロシージャを実行し、変数を渡して、戻り値とともにデータを返すことは可能ですか?

EntityFrameworkを使用した関数マッピングに関するコードを残さないでください。

私はこれを試しましたが、同じエラーが発生し続けます:

プロシージャまたは関数'usp_BusinessUser_Search'には、指定されていないパラメータ'@TotalRecords'が必要です。

これが私のコードです:

SqlParameter Business = new SqlParameter("Business", Search.Term);
SqlParameter Location = new SqlParameter("Location", Search.Location);
SqlParameter PageNumber = new SqlParameter("PageNumber", Search.CurrentPage);
SqlParameter RecordsPerPage = new SqlParameter("RecordsPerPage", Search.RecordsPerPage);
SqlParameter TotalRecords = new SqlParameter("TotalRecords", 0);

SqlParameter parm = new SqlParameter()
{
    ParameterName = "@TotalRecords",
    Value = 0,
    SqlDbType = SqlDbType.Int,
    Direction = System.Data.ParameterDirection.Output
};

var List = db.ExecuteStoreQuery<ENT_SearchBusinessResult>("exec usp_BusinessUser_Search",Business,Location,PageNumber,RecordsPerPage,parm); 

誰かがこれを引き起こしているものを知っていますか?

ありがとう

編集:

ストアドプロシージャコード:

ALTER PROCEDURE [dbo].[usp_BusinessUser_Search] (   @Business nVarChar(255) = NULL
                                                    , @Location nVarChar(255) = NULL
                                                    , @PageNumber Int = 1
                                                    , @RecordsPerPage Int = 10
                                                    , @TotalRecords Int OUTPUT)
AS 
BEGIN
    SET NOCOUNT ON;

    DECLARE @SQL NVARCHAR(MAX)
            , @CacheTable SYSNAME
            , @TotalRows Int
            , @Category VarChar(255)
            , @BusinessCategory Int 
            , @TownCounty VarChar(50)
            , @PcodeTownCounty VarChar(50)

    INSERT  Voucher_SearchHistory (Keyword, Location)
    SELECT  NULLIF(@Business,''), NULLIF(@Location,'')
4

5 に答える 5

3

これは役立つかもしれません:

http://blogs.msdn.com/b/diego/archive/2012/01/10/how-to-execute-stored-procedures-sqlquery-in-the-dbcontext-api.aspx

于 2012-08-02T14:25:08.370 に答える
2

ExcecuteでTotalRecordsSQLパラメータを渡していない

var List = db.ExecuteStoreQuery<ENT_SearchBusinessResult>(
"exec usp_BusinessUser_Search",Business,
Location,PageNumber,RecordsPerPage,parm);
于 2012-08-02T14:10:05.390 に答える
1

ExecuteSqlCommandWithReturnこれで、すべての作業を処理する次の拡張メソッドを使用できます。

https://gist.github.com/copernicus365/7037320

string sql = "EXEC sp_CoolProc @SomeParam, @AnotherParam";
int returnValue;
int val = db.ExecuteSqlCommandWithReturn(sql, out returnValue, someParam, anotherParam);

解決策の鍵は、ここで掲陽胡によるものでした。これは、これです(ただし、以下のすべては前述の拡張メソッドによって完全に処理されることに注意してください):SQLプロンプトで実行できるのと同じように、実行された結果を設定するだけです。次のようなSQL変数(この場合はパラメーターとして送信されます)へのプロシージャ:

EXEC @ReturnVal = sp_MyCoolProc;

@ReturnVal =このコードは、最初EXECに見つかった(空白が続く)後にフラグメントを追加し、 SqlParametersにReturnValパラメーターを追加します(またはSqlParamter、存在しない場合はsを作成します)。ただし、呼び出し元にはこれらは表示されません。

于 2013-10-18T06:45:47.317 に答える
0

パラメータ名には以下を含めることはできません@

SqlParameter parm = new SqlParameter()
{
    ParameterName = "TotalRecords",
    Value = 0,
    SqlDbType = SqlDbType.Int,
    Direction = System.Data.ParameterDirection.Output
};
于 2012-08-02T14:10:20.803 に答える
0

最近、そのパラメーター('@TotalRecords)を追加した場合は、edmxモデルの関数インポート定義を更新する必要があると思います。

于 2015-05-12T23:48:08.917 に答える