1

先週、if 条件で奇妙な振る舞いをしました。何が起こったのか知っている人に感謝します。私は回避策を見つけましたが、影にいるのは好きではありません。

説明させてください。

シナリオ 0 (これはすべてが爆発する前に機能していた)

言語: Visual Basic
Net Fwk : 3.5
クライアント: XP (x86) マシン (Winforms)
データベース: Win サーバーの共有フォルダーへのアクセス 2008 (x86 か x64 かは不明)
DB プロバイダー: Jet OleBD
Office : 2007 x86

アクセスする理由
低コストで、ユーザーは MS Access を利用でき、必要なものはすべて揃っています。

そしてある日、Win7が登場しました:

シナリオ 1 (すべてが機能しなくなった場合)

言語: Visual Basic
Net Fwk : 3.5
クライアント: Win 7 (x64) マシン (Winforms)
データベース: Win サーバーの共有フォルダーへのアクセス 2008 (x86 か x64 かは不明)
DB プロバイダー: ACE OleBD x86
オフィス: 2010 x86

この新しいシナリオでは、アプリケーションが正しく動作しなくなりました。

そして始まるオデッセイ。

最初に、開発マシンでアプリケーションをテストしました。シナリオはシナリオ 0 に似ていたので、すべて問題なく動作しました。

次に、Win7 テスト マシンを起動し、どこに問題があるかを突き止めようとしました。

シナリオ 2

言語: Visual Basic
Net Fwk : 3.5
クライアント: Win 7 (x64) マシン (Winforms)
データベース: ローカル フォルダーへのアクセス
DB プロバイダー: ACE OleBD x86
オフィス: 2010 x86

アプリケーションをテストすると、すべて正常に動作します。

赤ちゃんのように 2 ~ 3 分間泣いた後、Win7 テスト マシンを使用してインターネット経由で顧客のサーバーに接続することにしました。

シナリオ 3

言語: Visual Basic
Net Fwk : 3.5
クライアント: Win 7 (x64) マシン (Winforms)
データベース: Win サーバーの共有フォルダーへのアクセス 2008 (x86 か x64 かは不明)
DB プロバイダー: ACE OleBD x86
オフィス: 2010 x86

ローカル DB に対して実行した同じアプリケーションがリモート DB に対して失敗したことに驚きました (構成ファイルの接続文字列を変更しただけです)。

アプリケーションにデバッグ ステートメントを追加し始め、何度もテストしたので、期待どおりに動作しない理由を見つけることができました。

最後に、私はその声明を見つけました

If FinalDate.Subtract(StartingDate).TotalDays + 1 = 7 Then

シナリオ 1 と 3 では常にFalseを返します(常に!)。そして、シナリオ 0 と 2 のTrueまたはFalse 。

私はトールをののしり、ステートメントへのこの変更をテストしました

Dim totalDays As Integer = CInt(FinalDate.Subtract(StartingDate).TotalDays)
If totalDays + 1 = 7 Then

ご想像のとおり、これはうまく機能します。

しかし、問題は「なぜ?」です。

どうして????!!!!

何か案が?

4

1 に答える 1

0

合計日数:

現在の TimeSpan 構造体の値を丸一日および小数日で取得します。

したがって、丸一日のみが必要な場合は、とにかく Integer にキャストするのが最も安全であり、時間部分に関する懸念を避けることができます。

于 2013-07-15T22:08:49.057 に答える