Я просмотрел Stackoverflow и нашел почти идентичный вопрос здесь. Вопрос был задан год назад, но пока никто не ответил. Может мне повезет больше, чем user1038334 и мне кто-нибудь поможет.
У меня есть хранимая процедура SQL CLR, которая отлично работает в течение нескольких дней, пока не произойдет что-то странное. Моя хранимая процедура обновляет таблицы и возвращает значение в качестве кода результата. Поэтому, глядя на это значение, я могу решить, что что-то пошло не так. Проблема заключается в получении этого значения результата. Код C# создает исключение в момент получения возвращаемого значения.
var returnValue = new SqlParameter {Direction = ParameterDirection.ReturnValue};
command.Parameters.Add(returnValue);
connection.Open();
command.ExecuteNonQuery();
return (int)returnValue.Value; //<-- here is an exception
И самое смешное, что если я подключаю SQL Profiler, перехватываю запрос и затем выполняю этот запрос внутри SQL Server Management Studio, я все равно без проблем могу получить результирующее значение:
DECLARE @RC INT
EXECUTE @RC = MyClrStoreProc
SELECT @RC
Как только я повторно публикую сборку CLR или перезапускаю SQL Server, все исправляется.
Я почти уверен, что должна быть причина для такого странного поведения, но я не могу найти.
Версия SQL Server: Microsoft SQL Server Developer Edition (64-разрядная версия) — v.10.50.1765.0
Версия хост-ОС: Microsoft Windows NT 6.1 (7601)
Версия .Net: v4.0.30319
Любая помощь будет принята с благодарностью.