- - PR -
日付を文字列に
1
投稿者 | 投稿内容 | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2007-12-12 19:31
先程はありがとうございました。
本日、もう1点だけお聞きしたいのですが SQLServer2005からDataViewに取得した SQLServerではDateTime型の項目を YYYYMMDDの文字列に変換したいのですが Dim vDATE As DateTime Dim str AS String If DataView("日付型項目名") <> 0 Then str = vDATE.ToString("yyyyMMdd") END IF ではエラーになるので If DateTime.TryParse(DataView("日付型項目名").ToString, vDATE) = True Then str = vDATE.ToString("yyyyMMdd") END IF としました。 DateTime.TryParseを使うのはおかしいでしょうか? | ||||||||||||
|
投稿日時: 2007-12-12 19:52
何故エラーになるのでしょう? vDate は、DateTime 型でどのような値が入っているときに、どのようなエラーが発生するのかを、まずは調べることから始めると良いです。 _________________ R・田中一郎 - R.Tanaka.Ichiro’s Blog | ||||||||||||
|
投稿日時: 2007-12-13 09:25
DBの値がnullではありませんか?
| ||||||||||||
|
投稿日時: 2007-12-13 09:38
ご返答ありがとうございます。 エラーの内容は 「演算子 '<>' は 型 'Date' と 型 'Integer' に対して定義されていません。」 です。 SQLServerでのSELECT文ではWHERE 日付型項目名 <> 0 はOKなのですが VB2005だと上記のエラーになります。 そこでDateTime.TryParseで変換可能か判断し yyyyMMddの形に変換しましたが みなさんなら、どのようにされるのか 聞きたく投稿しました。 | ||||||||||||
|
投稿日時: 2007-12-13 10:45
0 というのは西暦で何年何月何日のことを指していると考えていますか?
0 ではなく、なびさんが思われている 0 が表すその日と DataView("日付型項目名") を比較すればよいのではないでしょうか。 | ||||||||||||
|
投稿日時: 2007-12-13 11:31
CLR は型にうるさい言語なので T-SQL と比べてもどうしようもないと思います。
このコードで日付の妥当性がチェックできると考える方が難しいと思います。 そのために用意されたメソッド (TryParse メソッド) が存在しているのにそれを無視してしまっています。 それどころか型をも無視しています。(ビルド エラーが起きている理由でもあります)
DataView("日付型項目名") で取得できる変数の型が抽象的である場合、検証は必要不可欠です。 このような場合は TryParse (TryParseExact) メソッドを使うようにしています。 とはいえ、業務続行不可能なレベルな場合は例外をスローさせてしまった方がバグの温床になりにくいと思います。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||||||
|
投稿日時: 2007-12-13 16:13
みなさん、大変貴重なご意見ありがとうございます。
| ||||||||||||
|
投稿日時: 2007-12-13 17:16
お礼自体は悪いことじゃないんだけどそれだけだと手応えがないというかなんというか。
今回のエラーはDateTimeだから起きるものじゃない。 型がわかっていないから起こるわけだしそれに対して自問自答できないと違う型で同じことを繰り返しそう。 ビルドエラーでつまづいた時その意味がわかっていないとわかろうとしないとIDEの親切さも無に帰す。 一郎氏にしてはめずらしく答えが質問と食い違っている・・ ある値と比較したいわけじゃなくて日付として妥当かのチェックをしたいってことらしいですぜ? まあわかりにくいわな。俺も2つ目の投稿を読むまでは何がしたいのかわかんなかった。 |
1