Хранимая процедура Azure не возвращает вставленный идентификатор в приложение ASP.NET - PullRequest
0 голосов
/ 24 ноября 2018

У меня есть хранимая процедура, определенная на сервере баз данных SQL Azure.

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

ALTER PROCEDURE [dbo].[InsertGameSession]
    (@finished BIT,
     @createUser VARCHAR(50))
AS
BEGIN
    SET NOCOUNT ON

    INSERT INTO [dbo].[game_Session]
           ([finished]
           ,[createUser]
           ,[createDate]
           ,[changeUser]
           ,[changeDate])
     VALUES
           (@finished
           ,@createUser
           ,CURRENT_TIMESTAMP
           ,@createUser
           ,CURRENT_TIMESTAMP)
     RETURN SCOPE_IDENTITY();
END

Вызывается из приложения ASP.NET через адаптер данных.

  • Тип команды: хранимая процедура
  • Режим выполнения: NonQuery
  • Модификатор: Public
  • Параметры:
    • @RETURN_VALUE, ColumnName = id, Direction = ReturnValue, SourceColumn = id
    • @finished, имя столбца = завершено, направление = вход, SourceColumn = завершено
    • @createUser, имя столбца = createUser, направление = вход, SourceColumn = createUser

Если хранимая процедура вызывается из СУБД, возвращается правильный идентификатор.

Если хранимая процедура вызывается из веб-приложения ASP.NET, возвращаемое значение внезапно становится равным 0 или равно нулю.

Что я должен сделать, чтобы получить тот же результат в ASP.NET?

1 Ответ

0 голосов
/ 25 ноября 2018

Не уверен, не увидев код вызова, но вы никогда не должны возвращать данные, используя возвращаемое значение хранимой процедуры.Это предназначено для указания на успех или неудачу, и только при вызове из TSQL.Вместо этого верните данные, используя выходной параметр или набор результатов.Итак,

CREATE OR ALTER PROCEDURE [dbo].[InsertGameSession]
    (@finished BIT,
     @createUser VARCHAR(50))
AS
BEGIN
    SET NOCOUNT ON

    INSERT INTO [dbo].[game_Session]
           ([finished]
           ,[createUser]
           ,[createDate]
           ,[changeUser]
           ,[changeDate])
     VALUES
           (@finished
           ,@createUser
           ,CURRENT_TIMESTAMP
           ,@createUser
           ,CURRENT_TIMESTAMP)
     SELECT SCOPE_IDENTITY() Id;
END

А затем из кода клиента получите новый идентификатор с помощью ExecuteScalar () или ExecuteReader ().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...