У меня была странная проблема, вот настройка:
Приложение 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?