2017-03-20 2 views
1

「手動で」動作するストアドプロシージャがありますが、それは「-1」を返し、エラーは発生しません。dapperを使用してsqlストアドプロシージャから挿入すると、-1(「動作していません」)

SPROC:

... PROCEDURE [ts].[uspAddClientForm](
    @ClientId int, 
    @SystemFormId bigint, 
    @Year int, 
    @Name nvarchar(255), 
    @CreatedBy nvarchar(2000), 
    @CreateDate datetime = NULL, 
    @Active bit = 1, 
    @ClientFormId bigint OUTPUT 
) 
    AS 
    BEGIN 
    SET NOCOUNT ON 
    INSERT INTO [ts].[ClientForm] ([ClientId], [SystemFormId], [Year] 
    ,[Name] ,[CreatedBy] ,[CreateDate], [Active]) 
    VALUES(@ClientId, @SystemFormId, @Year, @Name, @CreatedBy, GETDATE(), @Active) 

    SET @ClientFormId = SCOPE_IDENTITY() 
    END 

Dapperの関連コード:

var formParams = new DynamicParameters(); 
     formParams.Add("@ClientId", clientForm.ClientId); 
     formParams.Add("@SystemFormId", clientForm.SystemFormId); 
     formParams.Add("@Year", clientForm.Year); 
     formParams.Add("@Name", clientForm.Name); 
     formParams.Add("@CreatedBy", clientForm.Username); 
     formParams.Add("@CreateDate", DateTime.Now); 
     formParams.Add("@Active", 1); 
     formParams.Add("@ClientFormId", DbType.Int64, direction: ParameterDirection.Output); 

     var result = dbConnection.Execute("ts.uspAddClientForm", formParams, commandType: CommandType.StoredProcedure); 

    // retrieve output value 
    var clientId = formParams.Get<long>("@ClientFormId"); 

IはまたSELECTSCOPE_IDENTITY()を返すExecuteScalarQueryを用いOUTPUTパラメーターを除去し、失敗、試みました。私はOUTPUTの方法を使いたいと思っていますが、私は動作し、一般的にベストプラクティスを購読しているものは何でも公開しています。

答えて

0

あなたは何かとしてのアイデンティティを選択しようとすることができます

SELECT SCOPE_IDENTITY() AS ClientFormId 

そして、あなたのDapperのコードで: // assuming that your identity is an int .ExecuteScalar<int>("ts.uspAddClientForm", ...)

そしてまた、あなたが1つを必要としないよう、出力パラメータを削除します。

+0

、おかげで、! –

1

次の行が正しくない場合は、変更して試してみてください。それをしなかった

 formParams.Add("@ClientFormId", DbType.Int64, direction: ParameterDirection.Output); 

 formParams.Add("@ClientFormId","",dbType: DbType.Int64, direction: ParameterDirection.Output); 
関連する問題