- PR -

日付を文字列に

1
投稿者投稿内容
なび
ぬし
会議室デビュー日: 2007/08/27
投稿数: 273
投稿日時: 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を使うのはおかしいでしょうか?

R・田中一郎
ぬし
会議室デビュー日: 2005/11/03
投稿数: 979
投稿日時: 2007-12-12 19:52
引用:

なびさんの書き込み (2007-12-12 19:31) より:


If DataView("日付型項目名") <> 0 Then
str = vDATE.ToString("yyyyMMdd")
END IF
ではエラーになるので


何故エラーになるのでしょう?

vDate は、DateTime 型でどのような値が入っているときに、どのようなエラーが発生するのかを、まずは調べることから始めると良いです。

_________________
R・田中一郎 -  R.Tanaka.Ichiro’s Blog
hei
ベテラン
会議室デビュー日: 2006/09/07
投稿数: 78
投稿日時: 2007-12-13 09:25
DBの値がnullではありませんか?
なび
ぬし
会議室デビュー日: 2007/08/27
投稿数: 273
投稿日時: 2007-12-13 09:38


ご返答ありがとうございます。

エラーの内容は
「演算子 '<>' は 型 'Date' と 型 'Integer' に対して定義されていません。」
です。

SQLServerでのSELECT文ではWHERE 日付型項目名 <> 0 はOKなのですが
VB2005だと上記のエラーになります。

そこでDateTime.TryParseで変換可能か判断し
yyyyMMddの形に変換しましたが
みなさんなら、どのようにされるのか
聞きたく投稿しました。

一郎
ぬし
会議室デビュー日: 2002/10/11
投稿数: 1081
投稿日時: 2007-12-13 10:45
0 というのは西暦で何年何月何日のことを指していると考えていますか?
0 ではなく、なびさんが思われている 0 が表すその日と DataView("日付型項目名") を比較すればよいのではないでしょうか。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2007-12-13 11:31
引用:

なびさんの書き込み (2007-12-13 09:38) より:

SQLServerでのSELECT文ではWHERE 日付型項目名 <> 0 はOKなのですがVB2005だと上記のエラーになります。


CLR は型にうるさい言語なので T-SQL と比べてもどうしようもないと思います。

引用:

If DataView("日付型項目名") <> 0 Then


このコードで日付の妥当性がチェックできると考える方が難しいと思います。 そのために用意されたメソッド (TryParse メソッド) が存在しているのにそれを無視してしまっています。 それどころか型をも無視しています。(ビルド エラーが起きている理由でもあります)

引用:

そこでDateTime.TryParseで変換可能か判断しyyyyMMddの形に変換しましたがみなさんなら、どのようにされるのか


DataView("日付型項目名") で取得できる変数の型が抽象的である場合、検証は必要不可欠です。 このような場合は TryParse (TryParseExact) メソッドを使うようにしています。

とはいえ、業務続行不可能なレベルな場合は例外をスローさせてしまった方がバグの温床になりにくいと思います。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
なび
ぬし
会議室デビュー日: 2007/08/27
投稿数: 273
投稿日時: 2007-12-13 16:13
みなさん、大変貴重なご意見ありがとうございます。

ぶさいくろう
ぬし
会議室デビュー日: 2005/11/22
投稿数: 1232
お住まい・勤務地: 川崎市(は俺も含めてロクな人間が住んでないよw)
投稿日時: 2007-12-13 17:16
お礼自体は悪いことじゃないんだけどそれだけだと手応えがないというかなんというか。

今回のエラーはDateTimeだから起きるものじゃない。
型がわかっていないから起こるわけだしそれに対して自問自答できないと違う型で同じことを繰り返しそう。
ビルドエラーでつまづいた時その意味がわかっていないとわかろうとしないとIDEの親切さも無に帰す。

一郎氏にしてはめずらしく答えが質問と食い違っている・・
ある値と比較したいわけじゃなくて日付として妥当かのチェックをしたいってことらしいですぜ?
まあわかりにくいわな。俺も2つ目の投稿を読むまでは何がしたいのかわかんなかった。
1

スキルアップ/キャリアアップ(JOB@IT)