- - PR -
「今日」だけ表示ができない
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2006-10-04 12:45
私の読解力不足で未だに仰っている事があまり理解できていないのですが。
「他の日付は取得できる」の意味も分かっていません。 ずばっと言っちゃいましょう。 カラム「日付」をそのまま比較するのを止めてください。 日付型には実際には秒までではなく、さらに秒以下の値が入っています。 例)2006/10/04/00:00:00.100 これと 2006/10/04/00:00:00 を比較しても一致しません。 「秒」まで比較したいなら、CONVERT 関数で秒まで切ってください。 _________________ 囚人のジレンマな日々 | ||||
|
投稿日時: 2006-10-04 13:44
2006/10/03から一日たったわけですが「特定の日時を検索する」方の機能で
昨日の日付を渡したら、想定どおりのデータが取得できますか? 取得できているならデータの問題ではなくC#の問題が濃厚ですね。 2004/10/03は「今日」(もう昨日だけど)ではありませんがそういう勘違いということはないですか? 「Page_Loadで」ということはWEBアプリでいいんですよね?
「特定の日時を検索する」機能の方のイベントハンドラのソースはどうなっていますか? [追記] 書き忘れました。SqlDataSourceだけでは表示できませんよね。何で表示してますか? [ メッセージ編集済み 編集者: べる 編集日時 2006-10-04 13:48 ] | ||||
|
投稿日時: 2006-10-04 13:50
[ メッセージ編集済み 編集者: 未記入 編集日時 2007-01-19 21:41 ] | ||||
|
投稿日時: 2006-10-04 14:07
先日ご助言いただいたので、現在は日付は.Todayで取得し、念のため関数内で
DateTime datetimeMem = new DateTime(2004, datetimeTemp.Month, datetimeTemp.Day, 0, 0, 0); として、時間を全て0で埋めるようにしてから比較しています。 また、CONVERT関数はありましたので、 (CONVERT (DateTime, 日付, 111) = '" + datetimeTemp + "') として比較するようにしました。 今回のアプリは、おっしゃるとおりWEBアプリで、GridViewでデータを表示しています。 日時を指定する方法は2通りあって、カレンダーで指定する方法と、日付をテキストボックスに入力して検索ボタンを押す方法とあります。 またこのアプリでは「時間」は一切使用しませんが、DBには時間が全て0:00:00の状態で、DateTime型で入力されています。ですので、時間の取得は.Nowではなく.Todayで取得しており、そのため取得した時間も全て0:00:00になっていると思うのですが……。 もちろん、イレギュラーな場合も考えて、もし0:00:00ではない時間が入ってきても、強制的に0:00:00に変換するような処置もとってあります。 _________________ ◇◇◇ 社内SEを兼務する文系プログラマーです。 ◇◇◇ WinXP VisualStudio2005(C#メイン) MSSQL とかを使っています。 ◇◇◇ 周囲にプログラマがいないので、みなさんだけが頼りです(;ω;`) [ メッセージ編集済み 編集者: Wingard 編集日時 2006-10-04 14:10 ] | ||||
|
投稿日時: 2006-10-04 14:22
こんにちは。
ちょっと補足で。 datetimeTemp って初めて出てきました 少し状況を整理して、囚人さんたちがおっしゃっていることをまとめると、こんな感 じのコードになると思います。
これでちょっと試してみてくださいな。 _________________ ぽぴ王子@わんくま同盟 ぽぴ王子の人生プログラミング中 / ぽぴンち。 | ||||
|
投稿日時: 2006-10-04 14:35
>ぽぴ王子様
ああ、すみません、変数名、本物ではシステムがわかるような名前をダイレクトに付けていたもので(つД`)・。毎回手書きで書き換えているうちに混乱してしまったようです……。 下記のものを実行しましたら、 SELECT タイトル,コメント FROM 記念日情報 WHERE CONVERT (DateTime, 日付, 111)='2004/10/04' と出てきました。時間が消えていますね。ですが、現象変わらずです; ちなみにさっきのCONVERTのときは、 SELECT タイトル,コメント FROM 記念日情報 WHERE (CONVERT (DateTime, 日付, 111) = '2006/10/04 0:00:00') と出ていましたが、それでも比較はちゃんとできていたようです……。これがシステム的に良くない可能性も考えて、ぽぴ王子様の方法も使ってみます。 _________________ ◇◇◇ 社内SEを兼務する文系プログラマです。 ◇◇◇ WinXP VisualStudio2005(C#メイン) MS・SQLServer とかを使っています。 ◇◇◇ 周囲にプログラマがいないので、みなさんだけが頼りですヽ(`Д´;ノ | ||||
|
投稿日時: 2006-10-04 14:44
みなさんご回答ありがとうございます。
あまりこれだけに時間もかけていられないので、ご回答いただいていて申し訳ありませんが、ひとまず締めたいと思います。 最初のPage_Loadのときに呼び出さなければ、「今日に戻る」ボタンなども使えますので、ひとまず「起動時には呼び出されません。仕様です^^」で押し切ります(つД`) それで納得してもらうしかないと判断しました。 また時間のできたときに、じっくり考えてみたいと思います。 本当に長々とお付き合いくださり、ありがとうございました。 _________________ ◇◇◇ 社内SEを兼務する文系プログラマです。 ◇◇◇ WinXP VisualStudio2005(C#メイン) MS・SQLServer とかを使っています。 ◇◇◇ 周囲にプログラマがいないので、みなさんだけが頼りですヽ(`Д´;ノ | ||||
|
投稿日時: 2006-10-04 14:57
あ〜、わかった気がします。
まずPage_LoadでgetDBを呼び出すときに!IsPostBack判定してますか? してないなら「カレンダーで指定する方法」のときもそのPage_Loadのロジックを 通ってしまうことはわかりますか? そうすると今日を設定した場合、2回同じデータをバインドすることになります。 同じSelectCommandが連続で指定された場合データを取りにいかないようにできてるのかな。 実際SqlDataSourceのSelectingイベントとかが発生してないと思います。
SqlDataSource1.DataBind(); じゃなくて GridView.DataBind(); にすべきと思います。リファレンスには 「Select メソッドは、SqlDataSource にバインドされたコントロールの DataBind メソッドが呼び出されたときに、そのコントロールによって自動的に呼び出されます。データ バインド コントロールの DataSourceID プロパティを設定すると、コントロールは必要に応じてデータ ソースのデータに自動的にバインドされます。」 とありますから。 ちなみに、DataBind();がなくても!IsPostBack判定すれば正常に動くと思います。 あ、、締まってるww [ メッセージ編集済み 編集者: べる 編集日時 2006-10-04 14:58 ] |