2013-06-19 18 views
18

NLogをデータベースに書き込もうとしていますが、現在のコードでは、デバッグしようとすると例外がスローされますが、例外は次のとおりです。 'NotifyIcon.Program'の型初期化子が例外をスローしました。NLogをデータベースに書き込むように設定するにはどうすればよいですか?

私のNLog設定ファイルのコードは以下の通りですが、これは私が変更した唯一のコードなので、問題を引き起こしているようです。

<?xml version="1.0" encoding="utf-8" ?> 
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" autoReload="true"> 

    <!-- 
    See http://nlog-project.org/wiki/Configuration_file 
    for information on customizing logging rules and outputs. 
    --> 
    <targets> 
    <!-- add your targets here --> 

    <target name="database" xsi:type="Database" /> 
    <target xsi:type="Database" 
      name="String" 
      dbUserName="Layout" 
      dbProvider="sqlserver" 
      useTransactions="false" 
      connectionStringName="String" 
      connectionString="Data Source=AC-02\SQLEXPRESS;Initial Catalog=master;Integrated Security=True" 
      keepConnection="true" 
      dbDatabase="Layout" 
      dbPassword="Layout" 
      dbHost="Layout" 
      installConnectionString="Layout" 
      commandText="INSERT INTO Logs (Machine_Name, Username, Logon_Time, Screensaver_On, Screensaver_Off, Logoff_Time, Program_Start) Values @MachineName, @Username, @LogonTime, @Screensaver_On, @Screensaver_Off, @LogoffTime, @ProgramStart "/> 

    </targets> 

    <rules> 

    <logger name="*" minlevel="Trace" writeTo="database" /> 

    </rules> 
</nlog> 

任意およびすべてのヘルプは大=いただければ幸いです]

+0

私はこれについて専門家ではありませんが、最初に見ていると、あなたが得ているエラーはこのファイルとは無関係であると思われます。このファイルを元の状態に戻すと、コードは正常に動作しますか? – abhinav

+0

はい、私はNogを標準のテキストファイルに書き込むことができましたが、上記の設定ファイルを変更すると、例外がスローされます。 –

+0

別のデバッグのヒント、コマンドテキストでクエリを実行すると、DBスタンドアロンで、コンソール経由で動作しますか? – abhinav

答えて

12

挿入するパラメータが不足しているようです。

はnLogウェブページは、これらが必要とされていること、それは非常に明確にしていませんhttp://justinpdavis.blogspot.com/2010/04/logging-to-database-with-nlog.html

の例を参照してください、しかし、あなたは目を細めとhttps://github.com/nlog/NLog/wiki/Database-targetを読めば、あなたは彼らが必要とされていることを見つける必要があります。

+0

これはnlog.configファイルの正しい構文に関して非常に役に立ちました。私は問題を解決しました。 –

0

あなたがサンプルデータと、DBコンソールを使用して、あなたのDBにクエリを実行するのであれば、あなたは意味、エラーが発生します。はいの場合、問題はログに記録するDBスキーマにあります。あなたのスキーマと一致しないDBにデータを挿入しようとしています

+0

の下に[外部コード]があるだけで、おそらくこのリンクが役立ちます。 http://geekswithblogs.net/jkrebsbach/archive/2012/02/23/type-in​​itializer-for-classname-threw-an-exception.aspx – abhinav

1

挿入文字列が適切な形式ではありませんか?パラメータリストの周りに行方不明()があります。

commandText="INSERT INTO Logs (Machine_Name, Username, Logon_Time, Screensaver_On, Screensaver_Off, Logoff_Time, Program_Start) Values (@MachineName, @Username, @LogonTime, @Screensaver_On, @Screensaver_Off, @LogoffTime, @ProgramStart) " 
+0

例外はまだスローされていますが、ヘルプのおかげで私のコードは修正されましたbtw =] –

0

Uも2つのターゲットを書きました。また、多くの属性を設定する必要はありません。ちょうどいいはずです:

<target name="DbLog" xsi:type="Database" connectionString="YourConStr" 
     commandText="insert into [blablablabal] (Col1) values (@val1)"> 
    <parameter name="@val1" layout="${level}" /></target> 

このようなものです。いいえ? :)

関連する問題