.NET TIPS LINQ to SQLのログ出力をVisual Studioの[出力]ウィンドウに出力するには?[3.5、C#、VB]デジタルアドバンテージ 遠藤 孝信2008/10/30 |
|
|
「LINQ to SQLにより生成されるSQL文を確認するには?」で示しているように、データコンテキスト(DataContext)のLogプロパティの設定により、LINQのクエリから生成される実際のSQL文を標準出力やファイルに出力し確認することができる。
しかしVisual Studioを使ってコーディングしている場合、そのようなSQL文のログはIDEの[出力]ウィンドウに出力できれば便利である。本稿ではその方法について解説する。
TextWriterクラスの派生クラスでDebugクラスを使用
データコンテキストのLogプロパティには、抽象クラスであるTextWriterクラス(System.IO名前空間)を継承したクラスのオブジェクトを指定する必要があるが、[出力]ウィンドウに書き込めるようなTextWriterクラスの派生クラスは用意されていない。
ただし、「VS.NETでデバッグ・メッセージを出力するには?」で解説しているように、Debugクラス(System.Diagnostics名前空間)のWriteLineメソッドなどを使用すれば、[出力]ウィンドウへの文字列の出力は簡単だ。
従って、Debugクラスを使って文字出力を行う、TextWriterクラスの派生クラスを自分で実装し、そのインスタンスをデータコンテキストのLogプロパティに設定すれば、LINQのログを[出力]ウィンドウに出力させることができる。
筆者が簡単に試したところ、データコンテキストのログ出力用には、取りあえず文字列を引数に取るWriteLineメソッドをオーバーライドしておけばうまくいくようである。なお、TextWriterクラスではEncodingプロパティが抽象プロパティであるため、これも適当な内容でオーバーライドしておく必要がある。
[出力]ウィンドウにログ出力するサンプル・プログラム
以下のサンプル・プログラムでは、上述しているTextWriterクラスの派生クラスを「OutputWriterクラス」として実装している。そして「LINQ to SQLにより生成されるSQL文を確認するには?」で作成したサンプル・プログラムにそれを適用している。
| ||
[出力]ウィンドウにログ出力するLINQのサンプル・プログラム(上:C#、下:VB) | ||
プログラムの実行方法やMainメソッドでの処理については「LINQ to SQLにより生成されるSQL文を確認するには?」を参照してほしい。 |
上記のプログラムをデバッグ実行した場合には、[出力]ウィンドウは以下のような表示になる。
[出力]ウィンドウに出力されたLINQクエリのログ(SQL文) |
LINQクエリから生成されたSELECT文が出力されているのが分かる。
なお、上記サンプル・プログラムでは、#ifディレクティブを用いてデバッグ実行時以外で余計なプログラム・コードが生成されないようにしている。DEBUG定数は(既定では)デバッグ実行時にのみ自動的に定義される定数だ。
利用可能バージョン:.NET Framework 3.5以降 カテゴリ:クラス・ライブラリ 処理対象:LINQ カテゴリ:Visual Studio 2008 処理対象:IDE 使用ライブラリ:DataContextクラス(System.Data.Linq名前空間) 使用ライブラリ:TextWriterクラス(System.IO名前空間) 使用ライブラリ:Debugクラス(System.Diagnostics名前空間) 関連TIPS:LINQ to SQLにより生成されるSQL文を確認するには? 関連TIPS:VS.NETでデバッグ・メッセージを出力するには? |
|
「.NET TIPS」 |
- 第2回 簡潔なコーディングのために (2017/7/26)
ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている - 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう - 第1回 明瞭なコーディングのために (2017/7/19)
C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える - Presentation Translator (2017/7/18)
Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
|
|