Использование хранимой процедуры в NLog для цели базы данных

У меня возникла небольшая проблема с использованием хранимой процедуры вместо инструкции SQL INSERT при использовании NLog в веб-приложении C#. Строка подключения «Logger» правильно настроена в Web.config и правильно работает при замене commandText оператором SQL. Буду признателен за подсказку в правильном направлении. В этом примере хранимая процедура находится в схеме «Журналы» и называется «LogError».

<targets>
  <target xsi:type="Database"
      name="dberrorlog"
      connectionStringName="Logger"
      keepConnection="true"   
      commandText="[Logs].[LogError]" >
      <parameter name="@ProgName" layout="MyAppName"/>
      <parameter name="@CompName" layout="${machinename}"/>
      <parameter name="@LogLevel" layout="${level}"/>
      <parameter name="@UserName" layout="${identity}"/>
      <parameter name="@Error" layout="${exception:format=Message}"/>
      <parameter name="@SourceObj" layout="${exception:format=Method}"/>
      <parameter name="@StackTrace" layout="${exception:format=StackTrace}"/>
 </target>
</targets>
<rules>
  <logger name="*" minlevel="Error" writeTo="dberrorlog" />
</rules>

person Diego    schedule 06.03.2011    source источник


Ответы (2)


Из этого сообщения на форуме NLog попробуйте использовать текст для выполнения хранимой процедуры:

commandtext="exec AddActivityLog
                            @ApplicationName, 
                            @ApplicationTime, 
                            @Severity, 
                            @Logger, 
                            @SaxoID, 
                            @EventID, 
                            @Message, 
                            @URL, 
                            @URLReferrer, 
                            @RemoteAddress, 
                            @Callsite, 
                            @CurrentUICulture, 
                            @ThreadIdentity, 
                            @WindowsIdentity, 
                            @MachineName, 
                            @ProcessID, 
                            @ThreadID, 
                            @ThreadName, 
                            @Stacktrace, 
                            @Exception,
                            @Cookie,
                            @FormVariables,
                            @QueryString,
                            @HTTPUserAgent"

Примечание: ответ Клауса Ратье не отображался в моем браузере, поэтому мне пришлось просмотреть исходный код страницы, чтобы увидеть опубликованную им конфигурацию.

person Jeff Ogata    schedule 06.03.2011
comment
Спасибо, это помогло. Мне не приходило в голову, что я могу просто позвонить exec. Внутри он вызывает sp_executesql - person Diego; 08.03.2011
comment
@adrift Ссылка на сообщение форума NLog теперь избыточна. - person chridam; 21.03.2014

Обратите внимание, что, хотя решение @JeffOgata работает, это, вероятно, не тот способ, которым вы хотите решить проблему.

Вместо этого вы можете сделать что-то вроде этого:

commandText="AddActivityLog"
commandType="StoredProcedure"

Таким образом, вам не нужно беспокоиться о правильном форматировании запроса EXEC.

person Zachary Dow    schedule 03.09.2015
comment
как насчет параметров, которые необходимо передать? - person JoshYates1980; 19.02.2016