Я делаю страницу регистрации пользователя. Вставка пользовательской хранимой процедуры работает отлично, и в SQL Server и просмотрщике профилей выходной параметр возвращает @@Rowcount
, а при вызове этой хранимой процедуры из C # он всегда возвращает «0».
Моя хранимая процедура выглядит так:
ALTER PROCEDURE [CM].[usp_InsertUser]
@pEncrUserId NVARCHAR(max),
@pApplicationTypeId BIGINT,
@pLanguageId BIGINT,
@pUsername VARCHAR(15),
@pPassword NVARCHAR(max),
@pRecoverEmail VARCHAR(128),
@pCreatedBy BIGINT,
@pReturnId INT OUTPUT ,
@pErrorMessage NVARCHAR(Max) OUTPUT
AS
BEGIN TRY
INSERT INTO [CM].[tb_ApplicationUser] ([EncrUserId], [ApplicationTypeId],[LanguageId],
[UserName], [UserPassword], [RecoverEmail],
[CreatedBy], [StatusId], [ConcurId])
VALUES (@pEncrUserId, @pApplicationTypeId, @pLanguageId,
@pUsername, @pPassword, @pRecoverEmail,
@pCreatedBy, 1, NEWID())
SET @pReturnId = @@ROWCOUNT
END TRY
BEGIN CATCH
SET @pReturnID = @@ERROR;
SET @pErrorMessage = ERROR_MESSAGE();
END CATCH
И мой код C #:
cmd = dbClient.GetCommand("cm.usp_InsertUser", CommandType.StoredProcedure);
dbClient.AddParameter(cmd, "@pEncrUserId", DALayer.EnumEx.DBDataTypes.NVarChar, ParameterDirection.Input, 0, objInput.EncrUseId);
dbClient.AddParameter(cmd, "@pApplicationTypeId", DALayer.EnumEx.DBDataTypes.BigInt, ParameterDirection.Input, 150, objInput.ApplicationtypeId);
dbClient.AddParameter(cmd, "@pLanguageId", DALayer.EnumEx.DBDataTypes.BigInt, ParameterDirection.Input, 150, objInput.LanguageId);
dbClient.AddParameter(cmd, "@pUsername", DALayer.EnumEx.DBDataTypes.VarChar, ParameterDirection.Input, 15, objInput.UserName);
dbClient.AddParameter(cmd, "@pPassword", DALayer.EnumEx.DBDataTypes.NVarChar, ParameterDirection.Input, 0, objInput.Password);
dbClient.AddParameter(cmd, "@pRecoverEmail", DALayer.EnumEx.DBDataTypes.VarChar, ParameterDirection.Input, 150, objInput.RecoverEmail);
dbClient.AddParameter(cmd, "@pCreatedBy", DALayer.EnumEx.DBDataTypes.BigInt, ParameterDirection.Input, 150, objInput.CreatedBy);
dbClient.AddParameter(cmd, "@pReturnId", DALayer.EnumEx.DBDataTypes.BigInt, ParameterDirection.Output, 150);
dbClient.AddParameter(cmd, "@pErrorMessage", DALayer.EnumEx.DBDataTypes.NVarChar, ParameterDirection.Output, 150);
IDataReader dsTemp = dbClient.ExecuteDataReader(cmd);
returnID = Convert.ToInt64(dbClient.GetParameterValue(cmd, "@pReturnId"));
Любой совет полезен для меня. Я не могу понять, что в этом плохого. Этот метод работает в других вставках проекта.