Skip to content

SQL Reporting Services 式でDBNullの判定する場合は Is Nothing で

2008年3月27日
SQL Server 2000 Reporting Services を使っているのだが、最近新規レポートを作る機会があって嵌った。
あるフィールドの値がNULLだったらこっち表示、NOT NULLだったらこっち表示ってことをするために、Hiddenプロパティに次のようなブール値を戻す式を追加した。
= IIf(First(Fields!あるフィールド.Value, "DataSet1") Is DBNull.Value, False, True)
ブール型を戻すのにIIf使う必要ねーだろ、ボケ!って突っ込みはおいといて、
#オレの場合、国語的に作文を書くようなノリで思いつくがままコーディングするのでこうなる
この式だと、DB上NULLであっても Is DBNull.Value はFalseと判断されてしまうようだ。常に非表示になっちゃう。
 
そういえば、昔似た様なことやったっけなーと思い出し漁ってみた。そこでは、
= IIf(First(Fields!あるフィールド.Value, "DataSet1") Is Nothing, False, True)
としていた。
IIf・・・、国語的な思考回路に変化はないようだww
Is Nothingだ。Is DBNull.Valueではないんだ。
ふむぅ、SSRSがデータソースから内部Datasetを作成する際に、型変換してんのかな?
いろんなデータソースに対応するために、一般的な.NETデータ型に変換してんのかな?
2000以降のバージョンではどうなのかな?
2000では、式の編集でインテリセンスが働かないが、以降のバージョンではどうなのかな?
 
昔嵌った事に、またまた再度嵌ってしまったのでした・・・。orz
広告

From → SQL

8件のコメント
  1. けろ-みお permalink

    あれ?DBNull.Value の時は、Is ではなく、= じゃなかったでしたっけ?
    (いや、違うなぁ。Is ですね)
    IIf の三項演算子は、微妙ですね。
    IIf は、Object型で判断させるので、そのためなんですかね?

  2. けろ-みお permalink

    あれ?DBNull.Value の時は、Is ではなく、= じゃなかったでしたっけ?
    (いや、違うなぁ。Is ですね)
    IIf の三項演算子は、微妙ですね。
    IIf は、Object型で判断させるので、そのためなんですかね?

  3. けろ-みお permalink

    あれ?DBNull.Value の時は、Is ではなく、= じゃなかったでしたっけ?
    (いや、違うなぁ。Is ですね)
    IIf の三項演算子は、微妙ですね。
    IIf は、Object型で判断させるので、そのためなんですかね?

  4. けろ-みお permalink

    あれ?DBNull.Value の時は、Is ではなく、= じゃなかったでしたっけ?
    (いや、違うなぁ。Is ですね)
    IIf の三項演算子は、微妙ですね。
    IIf は、Object型で判断させるので、そのためなんですかね?

  5. けろ-みお permalink

    あれ?サーバーエラーになって、再度投稿したら、4個もコメントされてしまいました orz
    すいません。

  6. 松太郎 permalink

    IIfになってるのは、
    「あるフィールドがNothingだったら非表示にする。そうでなかったら非表示にしない。」
    これをそのまま式にしたからです。
    それ以外の特別な意味は一切ありません。
     
    = Not First(Fields!あるフィールド.Value, "DataSet1") Is Nothing
    本来はこれでいいはず。
     
    IsNot演算子は最近できたんだっけ?

  7. けろ-みお permalink

    IsNot は、VS.NET2005 では見たことありますが、VS.NET2003にはないですね。
    SQL Server 2000 Reporting Services だと、IsNot に対応していないような気がしました。
    (.NET Framework 1.X 基準で作られている?)

  8. 松太郎 permalink

    IsNotはVS.NET2005からのようですね。
    http://msdn2.microsoft.com/ja-jp/library/t3bat82c(VS.80).aspx

    #最初っから自分で確認しとけばよかったですね、スミマセン。
     
    SQL Server 2000 Reporting Servicesのベースは.NET Framework1.1です。
    実際に、式にIsNotを書いてみましたが、当然ビルドエラーになりました。

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト /  変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト /  変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト /  変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト /  変更 )

w

%s と連携中

%d人のブロガーが「いいね」をつけました。