处理CLR例程时出错

时间:2009-02-04 16:21:40

标签: sql sql-server sqlclr

如何从SQL CLR例程中引发SQL Server错误事件(类似于RAISERROR)?

2 个答案:

答案 0 :(得分:3)

理论上,基于我从我们的一个开发人员获得的代码示例:

try
{
    response = service.ProcessThisInfo(info);
}
catch (Exception ex)
{
      returnCode = Convert.ToInt32(ErrorEnum.SomeError);
      string msg = string.Format("RAISERROR('{0}',16,1)", ex.Message.Replace('\'', ' '));
      SqlCommand cmd = new SqlCommand(msg, connection);
      try
      {
            SqlContext.Pipe.ExecuteAndSend(cmd);
      }
      catch { } // stop duplicate exception throwing...
}

In practise, maybe not这是sql 2005中的一个问题

答案 1 :(得分:0)

如果您尝试这个,我认为您只会遇到一个令人讨厌的错误。在http://msdn.microsoft.com/en-us/library/ms255336(VS.80).aspx MSDN上的SqlContext.Pipe.ExecuteAndSend(cmd)有一个有趣的示例。它在没有修改的情况下无法工作,如果您将其更改为发送了一个raiserror,它会干净利落地发回给您一个NET例外。你不能用一个功能来做。

就原始问题而言,我说它(在CLR函数中引发SQL Server错误)在SQL Server 2005中是不可能的,但可以通过CLR程序完成。