2011-03-06 20 views
8

Estoy teniendo un pequeño problema al utilizar un procedimiento almacenado en lugar de una instrucción SQL INSERT al usar NLog en una aplicación web C#. La cadena de conexión "Logger" está configurada correctamente en Web.config y funciona correctamente al reemplazar el comandoText con una instrucción SQL. Agradecería una pista en la dirección correcta. En este ejemplo, el procedimiento almacenado se encuentra bajo el esquema "Logs" y se llama "LogError".Uso del procedimiento almacenado en NLog en un destino de base de datos

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

Respuesta

10

De esta Nlog forum post, intente utilizar el texto para ejecutar el procedimiento almacenado:

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" 

Nota al margen: la respuesta de Noel Rathje no haría en mi navegador, así que tuve que buscar una la fuente de la página para ver la configuración que publicó.

+0

Gracias, eso funcionó. No se me ocurrió que podía llamar al ejecutivo. Internamente llama a sp_executesql – Diego

+0

@adrift El enlace a la publicación del foro NLog ahora es redundante. – chridam

1

Tenga en cuenta que, si bien la solución de @ JeffOgata funciona, probablemente no sea la forma en que desea resolver el problema.

Usted puede hacer algo como esto en su lugar:

commandText="AddActivityLog" 
commandType="StoredProcedure" 

De esa manera usted no tiene que preocuparse por el formato de una consulta adecuada EXEC.

+0

¿qué pasa con los parámetros que deben pasarse? – JoshYates1980

Cuestiones relacionadas