C#Put Together the Final Custom Publisher
Listing 6. Your custom publisher now publishes to SQL Server and examines the App.config file, enabling you to modify the server, database, and table names on the fly. ![]() 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(); if (cfgSettings != null) { if (cfgSettings["serverName"] != null && cfgSettings["serverName"].Length > 0) { serverName = cfgSettings["serverName"]; } if (cfgSettings["databaseName"] !=null && cfgSettings["databaseName"].Length > 0) { databaseName = cfgSettings["databaseName"]; } if (cfgSettings["tableName"] !=null && cfgSettings["tableName"].Length > 0) { tableName = cfgSettings["tableName"]; } } 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(); } } } |