0

DateTime メンバーを持つ SQLite テーブルをクエリしています。

public class PhotraxBaseData
{
    [SQLite.PrimaryKey] 
    [SQLite.AutoIncrement]
    public int Id { get; set; }
    . . .
    public DateTime dateTimeTaken { get; set; }
    . . .

テーブルのレコードには、2008 年から 2014 年の範囲の dateTimeTaken 値が含まれています。null または空の dateTimeTaken 値を含むレコードはありません。

LINQPad 経由でクエリを実行すると、次のクエリで "2008-04-25 10:38:56" が返されます。

SELECT MIN(dateTimeTaken) FROM PhotraxBaseData

....「SELECT MAX(...」の場合は「2014-04-27 19:26:09」

IOW、LINQPad は私が期待するものを提供してくれます。それでも、このコードを実行すると:

dateFrom.Date = PhotraxSQLiteUtils.GetEarliestDate();
dateTo.Date = PhotraxSQLiteUtils.GetLatestDate();
 . . .
internal static DateTimeOffset GetEarliestDate()
{
    DateTimeOffset dto;
    using (var db = new SQLite.SQLiteConnection(App.DBPath))
    {
        string sql = "SELECT MIN(dateTimeTaken) FROM PhotraxBaseData";
        dto = db.ExecuteScalar<DateTimeOffset>(sql);
    }
    return dto;
}

注: GetLatestDate() メソッドは、MIN の代わりに MAX を使用することを除いて、GetEarliestDate() メソッドと同じです。

...どちらの場合も、メソッドから実際に返されるのは「1/1/0001」で、データ コントロールに表示されるのは「1/1/1914」です。データ コントロールは次のように宣言されます。

<StackPanel Orientation="Horizontal">
    <TextBlock Text="Photos taken between">
    </TextBlock>
    <DatePicker x:Name="dateFrom">
    </DatePicker>
</StackPanel>
<StackPanel Orientation="Horizontal">
    <TextBlock Text="and">
    </TextBlock>
    <DatePicker x:Name="dateTo">
    </DatePicker>

正しい値が得られないのはなぜですか? また、DateTimeOffset 変数とそれに続く DatePicker XAML コントロールを設定するために、実際の MIN および MAX 日付を取得するにはどうすればよいでしょうか ("1/1/0001" が返され、"1914/1/1" が表示される代わりに)。

注: SQLite ブラウザーで、SQLite テーブルを作成するときに使用できると思われるデータ型は、整数、テキスト、BLOB、実数、および数値のみであることがわかります。

だから多分私の問題は、クラスのDateTimeメンバー(dateTimeTaken)がSQLiteテーブルに対応するデータ型を持っていないため、...何として保存されていることですか?文章?これを処理して、クラスのデータ型を DateTime から String に変更し、データが "20141103_111111" (yyyymmdd_hhmmss) などとして格納されていることを確認して、正確な並べ替えを行う適切な方法はありますか?

4

1 に答える 1