|
.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」 |
TechTargetジャパン
- 新人プログラマーのためのInsider.NETの歩き方 2012 (2012/5/22)
晴れて.NETプログラマーとなる新人が効率的に開発技術を習得するには? 大量にある記事群の中から新人が読むべきお勧めを厳選して紹介 - jQuery MobileでJavaScriptプログラミング (2012/5/17)
jQuery Mobileは手軽なだけでなく、JavaScriptのAPIも充実しており、独自機能の実装もできる。今回は「グローバル設定」と「イベント」を解説 - Windows上で開発するための開発環境構築入門 (2012/5/16)
Windowsを使ってチームで開発している? なのにサーバOSを設定・運用した経験がない? そうなら、今すぐ学ぼう - 「コントラクト」でアプリのサンドボックスを乗り越える! (2012/5/11)
Metroスタイル・アプリはサンドボックスの中で動作する。それを乗り越えてほかのアプリと連携する仕組み「コントラクト」を解説
|
|
キャリアアップ
スポンサーからのお知らせ
- - PR -
イベントカレンダー
- - PR -



