2016-06-15 2 views
1

Я пытаюсь использовать NLog для входа в базу данных Oracle, уже создали таблицу, но когда я пытаюсь что-то войти я получаю исключение:NLog к базе данных (Oracle)

ORA-00928: отсутствует ВЫБОР ключевое слово

Мой файл NLog.config является:

<?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> 

И исключение происходит, когда я делаю это:

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

Я уже пытался сделать вставку без скобок и получить еще одно исключение:

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

См. Пример ** второй ** на [этой странице] (http://nlog-project.org/documentation/v2.0.1/html/T_NLog_Targets_DatabaseTarget.htm) для примера Oracle, хотя тот, который использует 'System .Data.OracleClient' – stuartd

+0

Теперь я получаю ORA-01036: незаконное имя/номер переменной ... –

ответ

2

Я предполагаю, что это поздно для вас, но я выложу решение для тех, кто имеет такую ​​же проблему. Я просто решил это.

Я сменил персонажей @ на двоеточие на commandText и на parameter теги Я полностью удалил его. Я не использую скобки, и он начал работать.

Это должно быть правильным таким образом:

<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

Наконец-то я извиняюсь за свой английский, я не использовал его в течение длительного времени.

Смежные вопросы