「手動で」動作するストアドプロシージャがありますが、それは「-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はまたSELECT
でSCOPE_IDENTITY()
を返すExecuteScalar
とQuery
を用いOUTPUT
パラメーターを除去し、失敗、試みました。私はOUTPUT
の方法を使いたいと思っていますが、私は動作し、一般的にベストプラクティスを購読しているものは何でも公開しています。
、おかげで、! –