繁体   English   中英

如何从SQLite表中获取实际的日期时间值?

[英]How can I get the actual datetime values from a SQLite table?

我正在查询具有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

....和“ 2014-04-27 19:26:09”表示“ SELECT MAX(...”

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;
}

注意:除了使用由MIN插入的MAX外,GetLatestDate()方法与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>

为什么我没有得到正确的价值观? 以及如何获取实际的MIN和MAX日期(而不是返回“ 1/1/0001”和显示“ 1/1/1914”)来填充DateTimeOffset变量以及随后的DatePicker XAML控件?

注意:我在SQLite浏览器中看到,创建SQLite表时似乎唯一可用的数据类型是整数,文本,BLOB,实数和数值

所以也许我的问题是该类的DateTime成员(dateTimeTaken)在SQLite表中没有对应的数据类型,因此被存储为...什么? 文本? 是否可以通过适当的方法将类中的数据类型从DateTime更改为String,然后确保将数据存储为“ 20141103_111111”(yyyymmdd_hhmmss)或类似内容,以便进行准确排序?

我认为您需要指定数据库返回的确切类型,然后在获得后在客户端将其转换。

由于返回的值可以是任何类型,因此将其装箱到对象中。 要取消装箱,必须首先将其转换为最初装箱的类型。 然后,将其转换为所需的任何类型。

换句话说,如果那是您从数据库中获取的值,请指定DateTime

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

另外,我不知道是否要将值转换为DateTimeOffset 您可能只想将方法的返回类型更改为DateTime

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM