Я пытаюсь использовать 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**
Я предполагаю, что это в последнее время для вас, но я отправлю решение другим, у кого такая же проблема. Я просто решил это.
Я изменил символы @
для двоеточий в 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
Наконец, извините за мой английский, я долгое время не пользуюсь им.
System.Data.OracleClient