各位,最近接触CLR Stored Procedure这种东东,有个问题请教大家,关于在SQL里面捕获异常信息的。
如下代码,当我部署到数据后,调用此SP,我如何能捕获到try{}catch{}里面的异常信息。
我试过在SP调用的时候加入begin try和begin catch,可是一样直接抛出异常信息,本来想通过ERROR_MESSAGE()
获取异常信息,可是好像无用。
所以想请教各位,在CS代码里的catch部分应该如何抛出异常,在sql调用的时候如何获取异常信息?
先谢谢各位![Microsoft.SqlServer.Server.SqlProcedure]
public static void usp_nms_update_sdn(int connection_string, long roe_id, string user_id)
{
try
{
using (SqlConnection nms_conn = new SqlConnection(connection_string))
{
nms_conn.Open();
SqlCommand cmd = new SqlCommand();
cmd.Connection = nms_conn;
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = "P_CMS_UpdateSDNByROEResult";
SqlParameter para = new SqlParameter("@roe_id", roe_id);
cmd.Parameters.Add(para);
para = new SqlParameter("@user_id", user_id);
cmd.Parameters.Add(para);
SqlContext.Pipe.Send(cmd.ExecuteReader());
}
}
catch (Exception ex)
{

}
}
begin try 
exec RED5031_Process..usp_nms_update_sdn @connection_string,@roe_id,@user_id
end try
begin catch
end catch

解决方案 »

  1.   


    try
    {
    //代码
    }
    catch (Exception ex)
    {
    throw ex; //抛出异常
    }
      

  2.   

    我试过直接throw出去,然后在begin try和begin catch中捕获,通过error_message()获取异常消息,可是根本就捕获不了。。
      

  3.   

    在cs中的catch应该可以捕获到吧
      

  4.   

    是的,可以捕获,我在CS代码中的catch部分加入SqlContext.Pipe.Send(ex.Message)来返还错误消息,
    只是在SQL脚本调用SP的时候,不知道如何获取这个消息。
      

  5.   

    已经有别的办法搞定了,返回一条数据即可,在SQL调用的时候可以得到这条数据。catch (Exception ex)
    {
    SqlMetaData[] metadata = new SqlMetaData[1];
    metadata[0] = new SqlMetaData
    ("return_message", SqlDbType.NVarChar, 200);
    SqlDataRecord record = new SqlDataRecord(metadata);
    record.SetString(0, ex.Message);
    SqlContext.Pipe.Send(record);
    }