2016-06-15 14 views
1
私はOracleデータベースにログインするためにNLogを使用しようとしている

は、すでに表を作成したが、私は何かをログに記録しようとすると、私は例外を取得:NLog(オラクル)は

ORA-00928を:SELECT行方不明

<?xml version="1.0" ?> 
<nlog autoReload="true" throwExceptions="true" internalLogFile="${basedir}/App_Data/nlog.txt" internalLogLevel="Debug" 
     internalLogToConsole="true"> 

    <targets> 
    <!--Useful for debugging--> 
    <target name="filelog" type="File" fileName="C:/App_Data/Site.log" 
    layout="${date}: ${message}" /> 

    <target name="databaselog" type="Database"> 

     <dbProvider>Oracle.DataAccess.Client</dbProvider> 

     <!-- database connection parameters --> 
     <!-- alternatively you could provide a single 'connectionstring' parameter --> 
     <connectionString>DATA SOURCE=database;PERSIST SECURITY INFO=True;USER ID=user;Password=password;Validate Connection=true</connectionString> 

     <commandText> 
     insert into RS_LOGTABLE ([log_user],[log_level],[log_date],[log_message]) values(@log_user,@log_level,@log_date,@log_message); 
     </commandText> 

     <parameter name="@log_user" layout="${message}"/> 
     <parameter name="@log_level" layout="${message}"/> 
     <parameter name="@log_date" layout="${date}"/> 
     <parameter name="@log_message" layout="${message}"/> 

    </target> 

    </targets> 

    <rules> 
    <logger name="*" minlevel="Trace" writeTo="filelog" /> 
    <logger name="*" minlevel="Trace" writeTo="databaselog" /> 
    </rules> 

</nlog> 

そして、私がこれを行う場合は、例外が発生します:キーワード

マイNLog.configファイルがある

logger = LogManager.GetCurrentClassLogger(); 
logger.Debug("Teste logger"); 

私はすでに括弧なしで挿入を行うと、別の例外を取得しようとしました:

**ORA-00936: missing expression** 
+1

Oracleの例については、[このページ](http://nlog-project.org/documentation/v2.0.1/html/T_NLog_Targets_DatabaseTarget.htm)の** second **の例を参照してください。ただし、 'System .Data.OracleClient' – stuartd

+0

ORA-01036:変数名/番号が不正です。 –

答えて

2

私はそれはあなたのために遅くまでだと思うが、私は同じ問題を抱えている他の人のための解決策を投稿します。私はちょうどそれを解決した。

コロンの場合、@の文字をcommandTextparameterのタグに変更しました。完全に削除しました。私は括弧を使いませんし、それは働き始めました。

それは、このように正しいようになります。

<commandText> 
    insert into RS_LOGTABLE (log_user,log_level,log_date,log_message) values(:log_user,:log_level,:log_date,:log_message); 
</commandText> 

<parameter name="log_user" layout="${message}"/> 
<parameter name="log_level" layout="${message}"/> 
<parameter name="log_date" layout="${date}"/> 
<parameter name="log_message" layout="${message}"/> 

私はDBPROVIDER Oracle.DataAccess.Clientでそれをテストしました。

他の人に警告: 私は予約語で名前が付けられた変数を持っていて、別の例外をスローします。詳細はこちらPHP ORA-01745: invalid host/bind variable name Warning

最後に私は私の英語のために申し訳ありません、私は長い間それを使用していません。