Are you able to get this style of INSERT statement working:

<appender name="AdoNetAppender" type="log4net.Appender.AdoNetAppender">
<connectionString value="System.Data.Odbc.OdbcConnection, System.Data,
version=1.0.3300.0, publicKeyToken=b77a5c561934e089, culture=neutral"
/>
 <layout type="log4net.Layout.PatternLayout">
  <conversionPattern value="INSERT INTO TESTTABLE (TESTSTRING) VALUES
('%message')" />
 </layout>
</appender> 

Yes, I know that is open to sql injection.

Have you tried using the Firebird provider?

 http://firebird.sourceforge.net/index.php?op=devel&sub=netprovider

According to this page:

http://tinyurl.com/bjrfg
http://firebird.sourceforge.net/index.php?op=devel&sub=netprovider&id=examples

it looks like Firebird may be expecting the placeholders to use an @
sign as their prefix:

 INSERT INTO TESTTABLE (TESTSTRING) VALUES (@logText)

Your parameter would look something like this:

 <parameter>
  <parameterName value="@logText" />
  <dbType value="String" />
  <size value="4000" />
  <layout type="log4net.Layout.PatternLayout">
   <conversionPattern value="%message" />
  </layout>
 </parameter>

Let us know if you're able to get it to work.

--- Frode Breimo <[EMAIL PROTECTED]> wrote:
> Hi
> 
> I''ve been working for two days now trying to send log information to
> my 
> FireBird database using SQL parameters, but I've been unable to find
> any 
> helpful examples or articles and could really use some help.
> 
> For testing purposes I'm just using a very simple table called
> TESTTABLE 
> with a single column called TESTSTRING, of type VarChar. I've tried 
> several things but here's what the appender definition in my config
> file 
> look like now:
> 
>     <appender name="myODBCAppender"
> type="log4net.Appender.ADONetAppender" >
>         <bufferSize value="1"/>
>         <param name="Threshold" value="ERROR" />
>         <param name="ConnectionType" 
> value="System.Data.Odbc.OdbcConnection, System.Data,
> version=1.0.3300.0, 
> publicKeyToken=b77a5c561934e089, culture=neutral" />
>         <param name="ConnectionString" 
> value="DRIVER=Firebird/Interbase(r) 
>
driver;UID=sysdba;PWD=masterkey;DBNAME=127.0.0.1:c:\\mbos\\mtbs1604v.gdb"
> />
>         <param name="CommandText" value="INSERT INTO TESTTABLE 
> (TESTSTRING) VALUES (:logText)" />
>         <param name="Parameter">
>             <param name="ParameterName" value="logText" />
>             <param name="DbType" value="String" />
>             <param name="Layout" type="log4net.Layout.PatternLayout">
>                 <param name="ConversionPattern" value="%P{logText}"
> />
>             </param>
>         </param>
>     </appender>
> 
> Using this config I get the following error message when I declare my
> 
> logger:
> 
>     log4net:ERROR [ADONetAppender] Could not prepare database command
> 
> [INSERT INTO TESTTABLE    (TESTSTRING) VALUES (:logText)]
>     System.Data.Odbc.OdbcException: ERROR [HY000] Dynamic SQL Error
>     SQL error code = -206
>     Column unknown
>     LOGTEXT
>     At line 1, column 45.
> 
> If I change the CommandText and use (@logText) instead of (:logText)
> I 
> get the following error:
> 
>     SQL error code = -104
>     Token unknown - line 1, char 44
>     @
> 
> If I remove the parameter and replace it with a set value everything 
> works fine, so for instance
>     <param name="CommandText" value="INSERT INTO TESTTABLE
> (TESTSTRING) 
> VALUES ('TestValue')" />
> will insert the value "TestValue" into the database, so there's
> nothing 
> wrong with the connection.
> 
> This should be possible just using the config file, shouldn't it? I 
> don't want to have to create everything programmatically.
> 
> I'm totally lost here, and any help would be much appreciated. I'm
> using 
> log4net 1.2.0 Beta 8 and FireBird 1.5, the project is a .Net 1.1
> console 
> application (for testing purposes, log4net will eventually be used in
> 
> our asp.net solutions)
> 
> 
> Thank you,
> Frode
> 
> 
> 

Reply via email to