|
C#Create a Custom Publisher
Listing 2. EMAB lets you create a custom publisher in a straightforward manner, as shown by this publisher that logs exceptions to SQL Server. Note, however, that the server, database, and table names are hard-coded. using System;
using System.Collections.Specialized;
using Microsoft.ApplicationBlocks.
ExceptionManagement;
using System.Text;
using System.Data.SqlClient;
namespace csEMABCustomPub
{
public class ExceptionPublisher
: IExceptionPublisher
{
string serverName = "(local)";
string databaseName = "ExceptionLog";
string tableName = "AppException";
public ExceptionPublisher()
{
}
void IExceptionPublisher.Publish(
Exception exception,
NameValueCollection addInfo,
NameValueCollection cfgSettings)
{
SqlConnection cn = new SqlConnection();
SqlCommand cmd = new SqlCommand();
StringBuilder sbConn = new
StringBuilder();
StringBuilder sbSQL = new
StringBuilder();
StringBuilder sbAddInfo = new
StringBuilder();
sbConn.AppendFormat("server={0};database={1};
uid=sa;pwd=;",serverName,databaseName);
cn.ConnectionString=sbConn.ToString();
if(addInfo != null)
{
foreach (string i in addInfo)
{
sbAddInfo.AppendFormat("{0}:
{1}; ",
i, addInfo.Get(i));
}
}
cn.Open();
cmd.Connection=cn;
sbSQL.AppendFormat("insert into {0}
(ExcMessage, ExcSource, ExcStackTrace,
ExcTargetSite, ExcAddInfo) values ",
tableName);
sbSQL.AppendFormat("('{0}','{1}',
'{2}','{3}','{4}')", exception.Message,
exception.Source,exception.StackTrace,
exception.TargetSite,sbAddInfo.ToString());
cmd.CommandText=sbSQL.ToString();
cmd.ExecuteNonQuery();
cn.Close();
}
}
}
|