0

私は検索してきましたが、私の答えが見つかりませんでしたので、この質問が重複している場合は私を許してください。C#で有効な日付をチェックするにはどうすればよいですか(datetime2ではないdatetime型があります)?

エンティティフレームワーク(EF)を使用してSQL Serverデータベースと通信する.Net C#アプリケーションがあります。私は大量のデータを変換しているので、自分の日付が有効なSQL Serverのdatetime型であることを確認する必要があります。私のPOCOクラスは日付にdatetime2型を使用しているため、 '0201-04-11 13:00:00 PM'の日付はSQL Serverデータベースで実際に挿入が試みられるまで有効です。私は...このようなもので、私は解決策が明らかであると確信している

if (DateTime.TryParseExact(legacyRecord.date_paid.ToString(), "M/d/yyyy hh:mm:ss tt", new CultureInfo("en-us"), DateTimeStyles.None, out datePaid)) 
{ 
    // Load record into lease payment table table 
    LoadLeasePayment loadLeasePayment = new LoadLeasePayment(); 
    Decimal LeasePaymentId = loadLeasePayment.AddRecord(prodLeaseId, legacyRecord.amount_paid, datePaid, prodContext, loadDate); 
} 

をDateTime.TryParseExactを使用しようとしましたが、私は木のために森を見ることができません。どんな助けも大歓迎です。

+0

有効とはどういう意味ですか? '2017-02-05 18:25:31.998'はdatetimeに代入できますが、' 2017-02-05 18:25:31.997'に変更されますか? –

+0

[Error - SqlDateTime overflow]が重複している可能性があります。 1/1/1753 12:00:00 AMと12/31/9999 11:59:59 PMの間にある必要があります(http://stackoverflow.com/questions/3399061/error-sqldatetime-overflow-must-be- -1-1753-120000-am-および-12-31-999の間) –

答えて

0

文字列のDateTime値を解析した後、ターゲットのSQLデータ型の範囲内にあることを確認する必要があります。 SqlDateTime構造体には、これを容易にするための静的なMinValueおよびMaxValueフィールドが含まれています。

if (DateTime.TryParseExact(legacyRecord.date_paid.ToString(), "M/d/yyyy hh:mm:ss tt", new CultureInfo("en-us"), DateTimeStyles.None, out datePaid)) 
{ 
    if((datePaid >= SqlDateTime.MinValue) && (datePaid <= SqlDateTime.MaxValue)) 
    { 
     // Load record into lease payment table table 
     LoadLeasePayment loadLeasePayment = new LoadLeasePayment(); 
     Decimal LeasePaymentId = loadLeasePayment.AddRecord(prodLeaseId, legacyRecord.amount_paid, datePaid, prodContext, loadDate); 
    } 
} 
関連する問題