0

ビルド中の SSIS パッケージ内のスクリプト タスクで DateTime.TryParseExact メソッドを使用して C# で日付を検証する際に問題が発生しています。

私がやっていることは、Split メソッドを使用して日付を含むファイル名の一部を取り除き、ファイル名の日付部分を「FileDate」という名前のローカル文字列変数に渡すことです。次に、DateTime.TryParseExact を使用してその変数の値を検証し、問題がなければ、その値を SSIS パッケージ レベルの変数に渡します。

たとえば、ファイルの名前が「filename_11-01-2013.txt」の場合、「_」で分割し、FileDate 変数に「11-01-2013」を保持します。その部分は私が作業しており、変数が正しく入力されていることを検証しました。

「using System.Globalization;」と宣言したことを確認しました。スクリプト タスクの一番上にあります。

これが私のコードです:

DateTime myDate;
if (DateTime.TryParseExact(FileDate, DateFormat, CultureInfo.InvariantCulture, DateTimeStyles.None, out myDate) == true)
{
    Dts.Variables["FileDate"].Value = FileDate;
    Dts.TaskResult = (int)ScriptResults.Success;
}
else
{
    Dts.TaskResult = (int)ScriptResults.Failure;
}

問題は、悪い日付を通過させていることです。たとえば、明らかに不適切な日付である "55-01-2013" を許可しています。

これが潜在的な答えに影響する場合に備えて、ファイルの最終的な命名方法を制御できることを言及する価値があります。どんな助けでも大歓迎です!

4

2 に答える 2

2

フォーマット文字列が であることを確認してMM-dd-yyyyくださいmm-dd-yyyy

このページによると、MM = 月、01 から 12 まで、mm = 分、00 から 59 まで。

于 2013-11-01T13:05:58.270 に答える
0

おそらく、期待どおりの正確な日付形式を使用する必要があります。「dd-MM-yyyy」だと思います。「d」、「g」などの組み込みの日付形式は、おそらくシナリオに適していません。

//const string FileDate = "05-01-2013";       // Success
//const string FileDate = "5-01-2013";       // Fail
//const string FileDate = "05-1-2013";       // Fail
//const string FileDate = "05-01-13";       // Fail
const string FileDate = "05/01/2013";       // Fail
const string DateFormat = "dd-MM-yyyy";
DateTime myDate;
if (DateTime.TryParseExact(FileDate, DateFormat, CultureInfo.InvariantCulture, DateTimeStyles.None, out myDate) == true)
{
    result = "success";
}
else
{
    result = "fail";
}
于 2013-11-01T13:01:25.230 に答える