views:

172

answers:

0

I am using log4net with AdoNetAppender. It logs all log info into a table. This table actually has 2 Integer columns (can be null). Here is the relevant part of my log4net config

<commandText value="INSERT INTO ActivityLog ([Date],[Thread],[Level],[Logger],[Message],[DealID]) 
                 VALUES (@log_date,@thread,@log_level,@logger,@message,@DealID)" />

 //other parameters hten DealID
<parameter>
      <parameterName value="@DealID" />
      <dbType value="Int32" />
       <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%property{DealID}" />
      </layout>
    </parameter>

What I found out was if I dont explicitly set using something like log4net.ThreadContext.Properties["DealID"] = DealID; it throws me an exception

System.FormatException occurred
  Message="Failed to convert parameter value from a String to a Int32."
  Source="System.Data"
  StackTrace:
       at System.Data.SqlClient.SqlParameter.CoerceValue(Object value, MetaType destinationType)
  InnerException: System.FormatException
       Message="Input string was not in a correct format."
       Source="mscorlib"
       StackTrace:
            at System.Number.StringToNumber(String str, NumberStyles options, NumberBuffer& number, NumberFormatInfo info, Boolean parseDecimal)
            at System.Number.ParseInt32(String s, NumberStyles style, NumberFormatInfo info)
            at System.String.System.IConvertible.ToInt32(IFormatProvider provider)
            at System.Convert.ChangeType(Object value, Type conversionType, IFormatProvider provider)
            at System.Data.SqlClient.SqlParameter.CoerceValue(Object value, MetaType destinationType)
       InnerException:

I would have to set it like

log4net.ThreadContext.Properties["DealID"] = 0;

Is there anyway that I can set a default parameter value in my log4net config for this Int32 field so that I need not set it explicitly to 0 if no value is supplied. And it makes me wonder why it does not happen to fields which are set as varchar (though no value is supplied to them)