各位,最近接触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
如下代码,当我部署到数据后,调用此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
try
{
//代码
}
catch (Exception ex)
{
throw ex; //抛出异常
}
只是在SQL脚本调用SP的时候,不知道如何获取这个消息。
{
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);
}