NLog to Database (Oracle)

2

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

ORA-00928: отсутствует ключевое слово SELECT

Мой файл 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
    См. Второй пример на этой странице для примера Oracle, хотя тот, который использует System.Data.OracleClient
  • 0
    Теперь я получаю ORA-01036: недопустимое имя / номер переменной ...
Теги:
nlog

1 ответ

3

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

Я изменил символы @ для двоеточий в 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: неверное имя переменной хоста/привязки Warning

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню