QA@IT

SQLで計算結果からbit型を出力する方法

4647 PV

あるテーブルから[走行距離]の項目を取得して、
それが0より大きいならFalse、それ以外ならNullの場合も含めてTrueにする、
というSQLを書こうと思ったのですが、これをASPでDataBindして呼び出そうとすると、
 「指定されたキャストは有効ではありません。」
というエラーが表示されました。
具体的には次のようなSQLを書いています。

SELECT 
     CASE 
        WHEN (走行距離>0) THEN 0 
        ELSE 1 
     END AS 走行距離表示 
FROM tbl_car
<asp:Label ID="lblCar" runat="server" Text="★" Visible='<%# Eval("走行距離表示") %>' />

要するに走行距離が0だったりNullだったりしたら★マークを出す、というだけのもので、
おそらく型がbit型になってないのだろうと思います。

CASE文のところの0を「False」や「'0'」や「'False'」にしてもダメ。
Evalのところを

<asp:Label ID="lblCar" runat="server" Text="★" Visible='<%# (bool)Eval("走行距離表示") %>' />

としてみてもダメでした。
どうすれば思うような表示ができるでしょうか?
ご指摘よろしくお願いいたします。

  • SQL とは SQL Server ですか? ASP とは ASP.NET ですか? もっと正確に書いていただけませんか。あとご自分の環境や何を作ろうとしているかなども、できるだけ詳しく書いていただくようお願いします。 -
  • SQLServer2003で、ASP.NETです。VisualStudio2008でWEBサイトを作っています。 -

回答

アップされているクエリで期待する結果は取得できていますか? NULL の時は問題ないですか?

期待通り 0 または 1 が取得できているのであれば、例えば、コードビハンドのコードで以下のようなメソッドを作って、

public string Result(int n)
{
  return (n == 0)? "★" : String.Empty;
}

それを以下のように設定することではいかがですか?

<asp:Label ID="lblCar" runat="server" Text='<%# Result((int)Eval("走行距離表示")) %>' />

検証してませんのでハズレだったらすみません。その時はその旨連絡ください。

編集 履歴 (0)
  • できました!Nullのときも問題なく処理できました!
    こんな書き方があったとは知りませんでした。
    大変参考になりました。ありがとうございました!
    -
ウォッチ

この質問への回答やコメントをメールでお知らせします。