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