2014-07-15 4 views
0

지난 몇 시간 동안 데이터베이스의 테이블에 로그를 작성하려고했습니다.Log4net에서 DB에 쓰지 않습니다.

에서 디버깅을 켠 후, 나는 다음과 같은 오류 문을받은 :

구성 섹션 : SqlCommand.Prepare 방법은 여기

내 조각입니다 명시 적으로 설정 비제 크기를 가지고 모든 가변 길이 매개 변수가 필요합니다 :

<configSections> 
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,Log4net"/> 
</configSections> 
<log4net> 
    <root> 
     <level value="ALL"/> 
     <appender-ref ref="loginLog"/> 
     <appender-ref ref="maskyooLog"/> 
     <appender-ref ref="bpelLog"/> 
    </root> 
    <appender name="bpelLog" type="log4net.Appender.AdoNetAppender"> 
     <bufferSize value="1" /> 
     <connectionType value="System.Data.SqlClient.SqlConnection, System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" /> 
     <connectionString value="server=***; uid=***; pwd=****; database=***" /> 
     <commandText value="INSERT INTO dbo.BPELLog ([UserName], [ProcessModeID], [CcCompanyNameID], [CcExpDate], 
                [CcID], [CcOwnerID], [CcOwnerName], [InvoiceDate], [CustomerNo], 
                [SumWithDue], [SumWithoutDue], [PaymentTypeID], [TaxRegistrationNum], [TrxUniqueID], [SalesPerson]) 
          VALUES (@UserName, @ProcessModeID, @CcCompanyNameID, @CcExpDate, @CcID, @CcOwnerID, @CcOwnerName, 
           @InvoiceDate, @CustomerNo, @SumWithDue, @SumWithoutDue, @PaymentTypeID, 
           @TaxRegistrationNum, @TrxUniqueID, @SalesPerson)" /> 
     <parameter> 
     <parameterName value="@InvoiceDate" /> 
     <dbType value="DateTime" /> 
     <layout type="log4net.Layout.RawTimeStampLayout" /> 
     </parameter> 
     <parameter> 
     <parameterName value="@ProcessModeID" /> 
     <dbType value="Int32" /> 
     <layout type="log4net.Layout.PatternLayout"> 
      <conversionPattern value="%property{ProcessModeID}" /> 
     </layout> 
     </parameter> 
     <parameter> 
     <parameterName value="@PaymentTypeID" /> 
     <dbType value="Int32" /> 
     <layout type="log4net.Layout.PatternLayout"> 
      <conversionPattern value="%property{PaymentTypeID}" /> 
     </layout> 
     </parameter> 
     <parameter> 
     <parameterName value="@CustomerNo"/> 
     <dbType value="String" /> 
     <layout type="log4net.Layout.PatternLayout"> 
      <conversionPattern value="%property{CustomerNo}" /> 
     </layout> 
     </parameter> 
     <parameter> 
     <parameterName value="@TaxRegistrationNum"/> 
     <dbType value="String" /> 
     <layout type="log4net.Layout.PatternLayout"> 
      <conversionPattern value="%property{TaxRegistrationNum}" /> 
     </layout> 
     </parameter> 
     <parameter> 
     <parameterName value="@SalesPerson"/> 
     <dbType value="String" /> 
     <layout type="log4net.Layout.PatternLayout"> 
      <conversionPattern value="%property{SalesPerson}" /> 
     </layout> 
     </parameter> 
     <parameter> 
     <parameterName value="@TrxUniqueID"/> 
     <dbType value="String" /> 
     <layout type="log4net.Layout.PatternLayout"> 
      <conversionPattern value="%property{TrxUniqueID}" /> 
     </layout> 
     </parameter> 
     <parameter> 
     <parameterName value="@CcOwnerName" /> 
     <dbType value="String" /> 
     <layout type="log4net.Layout.PatternLayout"> 
      <conversionPattern value="%property{CcOwnerName}" /> 
     </layout> 
     </parameter> 
     <parameter> 
     <parameterName value="@CcOwnerID" /> 
     <dbType value="String" /> 
     <layout type="log4net.Layout.PatternLayout"> 
      <conversionPattern value="%property{CcOwnerID}" /> 
     </layout> 
     </parameter> 
     <parameter> 
     <parameterName value="@CcID" /> 
     <dbType value="String" /> 
     <layout type="log4net.Layout.PatternLayout"> 
      <conversionPattern value="%property{CcID}" /> 
     </layout> 
     </parameter> 
     <parameter> 
     <parameterName value="@CcExpDate" /> 
     <dbType value="String" /> 
     <layout type="log4net.Layout.PatternLayout"> 
      <conversionPattern value="%property{CcExpDate}" /> 
     </layout> 
     </parameter> 
     <parameter> 
     <parameterName value="@UserName" /> 
     <dbType value="String" /> 
     <size value="50" /> 
     <layout type="log4net.Layout.PatternLayout"> 
      <conversionPattern value="%property{UserName}" /> 
     </layout> 
     </parameter> 
     <parameter> 
     <parameterName value="@CcCompanyNameID" /> 
     <dbType value="Int32" /> 
     <size value="15" /> 
     <layout type="log4net.Layout.PatternLayout"> 
      <conversionPattern value="%property{CcCompanyNameID}" /> 
     </layout> 
     </parameter> 
     <parameter> 
     <parameterName value="@SumWithoutDue" /> 
     <dbType value="decimal" /> 
     <size value="20" /> 
     <layout type="log4net.Layout.PatternLayout"> 
      <conversionPattern value="%property{SumWithoutDue}" /> 
     </layout> 
     </parameter> 
     <parameter> 
     <parameterName value="@SumWithDue" /> 
     <dbType value="decimal" /> 
     <size value="20" /> 
     <layout type="log4net.Layout.PatternLayout"> 
      <conversionPattern value="%property{SumWithDue}" /> 
     </layout> 
     </parameter> 
    </appender> 

그리고 클래스 :

ILog log = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType); 
      log4net.Config.XmlConfigurator.Configure(); 
      log4net.Util.SystemInfo.NullText = null; 

      GlobalContext.Properties["UserName"] = userName; 
      GlobalContext.Properties["ProcessModeID"] = processModeId; 
      GlobalContext.Properties["CcCompanyNameID"] = ccCompanyNameId; 
      GlobalContext.Properties["CcExpDate"] = cCExpDate; 
      GlobalContext.Properties["CcID"] = ccId; 
      GlobalContext.Properties["CcOwnerID"] = ccOwnerId; 
      GlobalContext.Properties["CcOwnerName"] = ccOwnerName; 
      GlobalContext.Properties["InvoiceDate"] = invoiceDate; 
      GlobalContext.Properties["CustomerNo"] = customerNo; 
      GlobalContext.Properties["SumWithDue"] = sumWithDue; 
      GlobalContext.Properties["SumWithoutDue"] = sumWithoutDue; 
      GlobalContext.Properties["PaymentTypeID"] = paymentTypeId; 
      GlobalContext.Properties["TaxRegistrationNum"] = taxRegistrationNum; 
      GlobalContext.Properties["TrxUniqueID"] = trxUniqueId; 
      GlobalContext.Properties["SalesPerson"] = salesPerson; 

      log.Debug(string.Format("UserName: {0}, ProcessModeID: {1}, CcCompanyNameID: {2}, CcExpDate: {3}, CcID: {4}, CcOwnerID: {5}, InvoiceDate: {6}, CustomerNo: {7}, SumWithDue: {8}, SumWithoutDue: {9}, PaymentTypeID: {10}," 
            + "TaxRegistrationNum: {11}, TrxUniqueID: {12}, SalesPerson: {13}", userName, processModeId, ccCompanyNameId, cCExpDate, ccId, ccOwnerId, ccOwnerName, invoiceDate, customerNo, sumWithDue, sumWithoutDue, 
            paymentTypeId, taxRegistrationNum, trxUniqueId, salesPerson)); 

출력 창에 오류가 표시되지 않습니다.

도움을 주시면 감사하겠습니다.

+0

내부 디버깅을 켜고 무슨 일이 일어나는지보십시오. http://stackoverflow.com/questions/756125/how-to-track-down-log4net-problems –

+0

안녕하십니까, 늦은 답변을 드려 죄송합니다. 디버깅을 돌 렸습니다. 다음 오류가 발생했습니다 : SqlCommand.Prepare 메서드는 모든 가변 길이 매개 변수에 0이 아닌 값을 명시 적으로 설정해야합니다. –

답변

0

아래의 모든 문자열 매개 변수에 크기를 줄 수 있습니까? 크기는 데이터베이스의 실제 크기와 일치해야합니다.

 <parameter> 
     <parameterName value="@CustomerNo"/> 
     <dbType value="String" /> 
     <size value="50" /> 
     <layout type="log4net.Layout.PatternLayout"> 
      <conversionPattern value="%property{CustomerNo}" /> 
     </layout> 
     </parameter> 
+0

자, 한 단계 앞으로 나아갔습니다. 소수 자릿수의 정밀도와 소수 자릿수를 설정해야합니다. 문법으로 제발? –

+0

고정 크기 데이터 유형 (int, decimal, bit 등)에 대해서는 일반적으로 크기를 지정하지 않아도됩니다. –

+0

자, 스케일 및 정밀도를 추가 했으므로 작동했습니다. 이제 System.FormatException 점점 : String에서 매개 변수 값을 Int32로 변환하지 못했습니다. ---> System.FormatException : 입력 문자열이 올바른 형식이 아닙니다. –

0

소수점에 정밀도와 소수점 이하 자릿수를 추가하고 문자열에 크기를 추가하여이 문제를 해결했습니다. 또한 쿼리에서 콜론 하나를 놓쳤습니다. 지원해 주셔서 감사합니다.

관련 문제