0

I'm using DateTime in my C# winforms tool, and I'm storing dates into an SQL database using this line:

iDisc.acquirementDate.ToString("yyyy-MM-dd")

The SQL database field is of DATE type, and when this date is stored, its stored correctly, such as this: 2013-03-14

When I want to the value, I use this line:

DateTime acquirementDate = DateTime.ParseExact(iDiscRow[TableNames.Discs.acquirementDate].ToString(), "yyyy-MM-dd", CultureInfo.InvariantCulture);

However, a FormatException occurs at the above line, because the string being parsed is not a valid DateTime complaint string.

The value this is being parsed is the this: 3/14/2013 12:00:00 AM

What I don't understand is, why is the value read as 3/14/2013 12:00:00 AM, when in the database its stored as 2013-03-14 ?

I'm using SqlDataReader to retrieve the data from database. Can post that code here, but I don't think its needed as its very basic.

4

3 に答える 3

1

あなたiDiscRow[TableNames.Discs.acquirementDate]はすでにDateTimeのようです。その場合は、キャストするだけです。

DateTime acquirementDate = (DateTime)iDiscRow[TableNames.Discs.acquirementDate];

そして、あなたが得ている理由3/14/2013 12:00:00 AMは、DateTime.ToString()現在のスレッド文化を使用して に変換DateTimeすることstringです。これは WinForm アプリなので、Windows システムのDateTime.

于 2013-03-14T18:47:14.713 に答える
1

行はオブジェクトとして取得されます。ToString() メソッドがフォーマットしています。使用する形式を ToString() メソッドに渡す必要があります。

于 2013-03-14T18:44:49.337 に答える
0

この回答は、データベースの値が null になる可能性がある場合にのみ関連します。これは私自身の状況であることが多いため、この関数をクラス ライブラリのヘルパー クラスに記述しました。

    public DateTime? SetDateTimeValue(DataTable dataTableIn
      , int rowNumber, string fieldName)
    {
        DateTime? returnValue = new DateTime?();
        DateTime tempValue = new DateTime();
        try
        {
         string fieldValueAsString = dataTableIn.Rows[rowNumber][fieldName].ToString();
         result = DateTime.TryParse(fieldValueAsString, out tempValue);
         if (result)
                returnValue = tempValue;
            }
        catch
        {
            returnValue = null;
        }
        return returnValue;
    }

ここにサンプル呼び出しがあります

DataTable data = dataAccess.GetEmergencyVisitDataFromClinicalApplicationSupport(VisitID);

        if (data.Rows.Count == 1)
        {
            ValueSetter setterOfValues = new ValueSetter();
            skip a bunch of lines.
            AdmitDecisionDateTime = 
            setterOfValues.SetDateTimeValue(data, 0, "admit_decision_datetime");
于 2013-03-14T19:47:44.817 に答える