首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AdoNetAppender参数的默认值

AdoNetAppender参数的默认值
EN

Stack Overflow用户
提问于 2009-12-24 01:24:34
回答 1查看 10.3K关注 0票数 10

我在AdoNetAppender中使用log4net。它将所有日志信息记录到一个表中。这个表实际上有2个整数列(可以是null)。

以下是我的log4net配置的相关部分:

代码语言:javascript
复制
<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>

我发现,如果我不显式地使用log4net.ThreadContext.Properties["DealID"] = DealID;之类的东西进行设置,它会抛出一个异常:

代码语言:javascript
复制
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: 

我必须将其设置为:

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

我是否可以在我的log4net配置中为这个Int32字段设置一个默认参数值,这样如果没有提供任何值,我就不需要显式地将它设置为0?这让我想知道为什么设置为varchar的字段不会发生这种情况(尽管没有为它们提供值)。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-01-10 23:11:35

更改您的附加器:

代码语言:javascript
复制
<parameter>
    <parameterName value="@DealID" />
    <dbType value="Int32" />
    <layout type="log4net.Layout.RawPropertyLayout">  <!-- notice this -->
        <key value="DealID" />  <!-- and notice this instead of the pattern layout -->
    </layout>
</parameter>

值得肯定的是,我发现它是from this thread。(还有一堆其他的搜索试图做同样的事情。

票数 29
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1954159

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档