Tôi đang sử dụng log4net với AdoNetAppender. Nó ghi lại tất cả thông tin nhật ký vào một bảng. Bảng này thực sự có 2 cột Integer (có thể là null).Giá trị mặc định cho thông số AdoNetAppender
Dưới đây là phần có liên quan của cấu hình log4net tôi:
<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>
gì tôi phát hiện ra là nếu tôi không rõ ràng thiết lập sử dụng một cái gì đó giống như log4net.ThreadContext.Properties["DealID"] = DealID;
nó ném cho tôi một ngoại lệ:
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:
Tôi sẽ phải đặt nó như:
log4net.ThreadContext.Properties["DealID"] = 0;
Có anyway mà tôi có thể thiết lập một giá trị tham số mặc định trong cấu hình log4net của tôi cho trường Int32 này để tôi không cần phải đặt nó rõ ràng là 0 nếu không có giá trị được cung cấp? Và nó làm cho tôi tự hỏi tại sao nó không xảy ra với các lĩnh vực được thiết lập như varchar (mặc dù không có giá trị được cung cấp cho họ).