Почему я получаю InvalidCastException при приведении объекта к целому числу? - PullRequest
1 голос
/ 03 октября 2009

У меня была странная проблема, вот настройка:

Приложение ASP.NET 3.5 / серверная часть MSSQLSERVER 2008.

Я вызвал ExecuteScalar из моего кода, который возвратил объект, затем я попытался привести этот объект к int (у меня фактически есть универсальный метод

 T ConvertDBValue<T>(object o) {...}

, но это не так важно).

ExecuteScalar выполняет следующие действия:

...  
insert into ...
select scope_identity()

Мой первичный ключ - это поле идентификатора, и он вернул 85. Следующее, что я получил, это InvalidCastException, пытающийся привести 85 к int.

Решением было явное создание переменной INT и присвоение ей SCOPE_IDENTITY () перед возвратом из sproc следующим образом:

...  
DECLARE @x int
insert into ...
select @x = scope_identity()
select @x

Может кто-нибудь сказать мне, в чем была проблема с моим первым подходом, и почему бы не привести 85 к int?

1 Ответ

6 голосов
/ 03 октября 2009

scope_identity() фактически возвращает (TSQL) BIGINT (я был пойман этим раньше!)

Итак, ваш код пытался привести BIGINT к int.

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