トップページへ PASSJ ブログへ
トップページへ
分科会
特集!
コミュニケーション
資格
セミナー・コンファレンス
インフォメーション



Webテクノロジー ボードリーダー:小川 貢

毎月第2、第4木曜日はボードリーダーからのレポートを掲載いたします。
 
   

2004年2月26日
『どっとねっとと雑多な日々 22』

皆さん、こんにちは。今回は、PASSJ Conference 2004 のデモの内容を紹介します。

< http://www.sqlpassj.org/conf2004/speaker.aspx#Begin02 >

相変わらず、時間配分を考えていなかったため、参加された方に申し訳ない
終わり方をしてしまったので、今後 pml-web のほうでもサポートさせていただきたいと思います。

DEMO に使用した環境
  Windows XP Service Pack 1
  SQL Server 2000 Service Pack 3a
  Visual Studio .NET 2003 - C#

DEMO を実行したり再現させたりするための最低限の環境
  .NET Framework 1.1
 ※ DEMO を Solution として開きたい場合は Visual Studio .NET 2003 が必要です。

ダウンロード
 http://www.sqlpassj.org/conf2004/DEMO.lzh

セットアップ
 DEMO.lzh を解凍し、DEMO\Setup.cmd を実行してください。
  SQL Server 2000/"Yukon", MSDE 2000 で動作確認していますが、もしかすると
  ほかの環境ではエラーになる場合がありますので、そのときはpml-web に投稿してください。

DEMO 1
 System.Data.SqlClient.SqlConnection を使用して、SQL Server への接続を
 コマンドラインアプリケーションとして作成しました。
 コマンドラインから ConnectionString を入力させ、入力された情報を元に
 SQL Server に接続します。
 このとき、入力された ConnectionString が正しくない場合は、Exception
 が発生しますので、それに対応する Try/Catch を記述しないと Exception
 でアプリケーションがエラーになります。

DEMO 2
 ストアドプロシージャを使用して、SELECT するサンプル。
 ストアドプロシージャを実行する場合は SqlCommand.CommandType を
  CommandType.StoredProcedure に必ず変更すること。

DEMO 3
  SqlDataReader を利用して、複数 SQL を実行するサンプル。
 取得した件数は SqlDataReader を開いた直後にはわからないので、開くと
 同時に件数を取得できるようにするためのサンプルです。
 複数の結果を移動するには SqlDataReader.NextResult() メソッドで移動します。

DEMO 4
  SqlDataAdapter と DataSet を利用してデータソースからデータを取得し
 たり、データを更新するサンプル。
 「データアダプタ構成ウィザード」を使うと、デフォルトの場合はパフォーマンスを
  悪化させるような SQL を生成してくれるという例。

DEMO 5
  DEMO 4 をストアドプロシージャを使用するように変更し、パフォーマンスに対する
  回避策のサンプル。
 テーブルには TIMESTAMP 列を用意して、主キーと TIMESTAMP 列を WHERE
 条件として、項目の更新をするという例です。
 参照したときと更新したときに誰がデータを更新していた場合、アプリケーション上
  問題になる場合があるときに、どのように回避するのかの一例。

DEMO 6
  DEMO 5 の場合は誰でもデータの参照はできてしまうので、誰かが参照し
 ている場合は、そのデータを参照させないというロジックを実装する場合のサンプル。
 原理は、FROM TO で指定されたデータを参照させるときに、Watch フラグに値を入れて、
  SELECT 時に Watch フラグが NULL のものだけ参照するように WHERE 条件を
  設定するというもの。

DEMO 7
 大量のデータ更新時に、現在の ADO.NET では INSERT/UPDATE/DELETE を
 1 回 1 回 SQL を発行するので、非常にボトルネックになっています。
 それを回避するには、自前で複数の SQL を生成するようにして、一回の
 ExecuteNonQuery で実行すれば、パフォーマンスがよくなるという例です。
 この機能は ADO.NET V2.0 になれば実装されますが、今現在実装されてい
 ませんので、もし SqlDataAdapter と DataSet で大量データ更新を行って
 いる方がいましたら、こちらのサンプルを参考にパフォーマンス改善を行ってください。

最後に
  Visual Studio .NET で用意されているウィザードや ADO.NET は生産性は
 非常に高いものがありますが、これがパフォーマンスに優れているかというと
 そうでもありません。
  .NET アプリケーションにしたらパフォーマンスが悪くなったなどという
 こともありますので、なぜ遅くなるのかの理由を理解した上で、
 パフォーマンスを追及するには SQL プロファイラを活用していただければと思います。

 

ボードリーダーレポート トップページへ

 

 
PASSJメールニュース 著作権ついて プライバシーポリシー リンクポリシー お問い合わせ
(C) 2005 Professional Association for SQL Server Japan. All rights reserved.