我查看了 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
任何帮助将不胜感激。