ObjectParameter не получает выходное значение из хранимой процедурыC#

Место общения программистов C#
Anonymous
ObjectParameter не получает выходное значение из хранимой процедуры

Сообщение Anonymous »

В моем приложении (VS2015, C#, WebForm) у меня был следующий код, который раньше работал нормально (как локально, так и на рабочем сервере), но теперь я получаю ошибки:

Хранимая процедура для вставки элемента:

Код: Выделить всё

CREATE PROCEDURE [dbo].[StoredProcedure_Item_Insert]
@ItemText VARCHAR(250),
@InsertedID INT OUTPUT

INSERT INTO [dbo].[Item] ([ItemText])
VALUES (@ItemText  -- ItemText - varchar(250)
);

SET @InsertedID = SCOPE_IDENTITY();

SELECT @InsertedID AS InsertedID;
Код репозитория:

Код: Выделить всё

public int InsertItem(string itemText)
{
ObjectParameter InsertedId = new ObjectParameter("InsertedID", -1);

_db.StoredProcedure_Item_insert(feeText, InsertedId);

return (int)InsertedId.Value;
}
Импорт функции для этой хранимой процедуры в файле .edmx

Код: Выделить всё

Returns a Collection Of Scalars: Int32
И когда я нажимаю кнопку «Получить информацию о столбце», я получаю

Код: Выделить всё

Name: InsertedID
EDM Type: Int32
Db Type: int
Nullable: true
Единственное изменение, о котором я могу вспомнить, это то, что моя машина была обновлена ​​до Windows 10, поэтому мне пришлось переустановить VS2015.

Что я пробовал/нашел:
  • Код: Выделить всё

    InsertedId.Value
    всегда имеет значение -1
  • Сообщение об ошибке находится в 'InsertedId` --> 'MappableType' --> 'DeclaringMethod'
  • Ошибка в DeclaringMethod:


    ((System.RuntimeType)InsertedId.MappableType).DeclaringMethod выдал исключение введите System.InvalidOperationException System.Reflection.MethodBase {System.InvalidOperationException}
  • Код: Выделить всё

    DeclaringMethod.Message
    говорит


    Метод можно вызывать только для типа, для которого Type.IsGenericParameter имеет значение true.
  • Проверил OUT и OUTPUT в хранимой процедуре
  • Попробовал SELECT @InsertedID и RETURN @InsertedID
  • Попробовал новый ObjectParameter("InsertedID", typeof(Int32)) вместо -1 для второго параметра
Я уже много часов пытаюсь понять, что происходит, но совсем застрял...

Подробнее здесь: https://stackoverflow.com/questions/404 ... -procedure

Вернуться в «C#»