繁体   English   中英

SQLite与从数据库检索的C#DateTime不匹配

SQLite won't match C# DateTime retrieved from database

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

我试图在内存中使用SQLite在应用程序上运行一些单元测试,但是遇到了一个奇怪的问题:

我有两个查询。 第一个结果是给定列表名称的最新价格列表的日期,第二个查询中使用DateTime来获取最新价格。 问题是,第二个查询不返回任何结果。

知道这里的背景可能出什么问题了吗?

        var effective = DbSession.Current.CreateCriteria<ItemPrice>()
                .SetProjection(Projections.Max("Effective"))
                .Add(Restrictions.Le("Effective", workDate))
                .CreateCriteria("PriceList")
                .Add(Restrictions.Eq("ListName", listName))
                .Add(Restrictions.Eq("Active", true))
                .UniqueResult<DateTime>();

        return DbSession.Current.CreateCriteria<ItemPrice>()
            .Add(Restrictions.Eq("Effective", effective))
            .CreateCriteria("PriceList")
            .Add(Restrictions.Eq("ListName", listName))
            .Add(Restrictions.Eq("Active", true))
            .List<ItemPrice>();

结果:最终实现了一个自定义的IUserType以将DateTime存储为字符串,并为Fluent自动映射约定添加了一个可供DateTime使用的约定(包括在下面):

class SQLiteDateTime : IUserType
    {
        #region IUserType Members

        public object Assemble(object cached, object owner)
        {
            return cached;
        }

        public object DeepCopy(object value)
        {
            var dt = (DateTime) value;
            return new DateTime(dt.Year, dt.Month, dt.Day, dt.Hour, dt.Minute, dt.Second);
        }

        public object Disassemble(object value)
        {
            return String.Format("{0:yyyy'-'MM'-'dd' 'HH':'mm':'ss.fff}", value);
        }

        public new bool Equals(object x, object y)
        {
            return x.Equals(y);
        }

        public int GetHashCode(object x)
        {
            return x.GetHashCode();
        }

        public bool IsMutable
        {
            get { return false; }
        }

        public object NullSafeGet(IDataReader rs, string[] names, object owner)
        { 
            string dateString = (string)NHibernateUtil.String.NullSafeGet(rs, names[0]);
            DateTime result = DateTime.ParseExact(dateString, "yyyy'-'MM'-'dd' 'HH':'mm':'ss.fff", CultureInfo.InvariantCulture.DateTimeFormat);

            return result;
        }

        public void NullSafeSet(IDbCommand cmd, object value, int index)
        {  
            if (value == null)
            {
                NHibernateUtil.String.NullSafeSet(cmd, null, index);
                return;
            }
            value = Disassemble(value);
            NHibernateUtil.String.NullSafeSet(cmd, value, index);
        }  

        public object Replace(object original, object target, object owner)
        {
            return original;
        }

        public Type ReturnedType
        {
            get { return typeof (DateTime); }
        }

        public NHibernate.SqlTypes.SqlType[] SqlTypes
        {
            get {   
            var types = new SqlType[1];  
            types[0] = new SqlType(DbType.String);  
            return types;  
            } 
        }

        #endregion
    }
1 个回复

尝试为该列设置时间戳的CustomType 我认为这是节省毫秒与不节省毫秒之间的区别。

1 从SQLite数据库C#WPF中提取日期时间的问题

我有一个非常怪异的错误... 我有两个窄等式类,用于从sqlite数据库中提取数据 我在两个SQLite数据库中将日期另存为DATETIME。 我的第一个,包含了这种加载数据的方法 第二个: 第一种方法有效,但是第二种方法使我在try catch附近出现异常。 格 ...

3 从数据库转换检索到的日期时间

我正在尝试以JSON格式将日期发送到我的Android设备。 另外,时间为24小时格式。 如何将其更改为12小时格式? 的PHP JSON响应: 我正在尝试将2016-11-12转换为类似November 12, 2016 10:47:23 。 我该怎么做呢? ...

2016-11-25 08:23:27 4 54   php/ mysql
4 为什么无法从ListView中的sqlite数据库检索数据?

我想从sqlite数据库添加的数据中以列表视图显示我的所有数据。当我单击保存按钮时,它会显示一条消息“添加成功”。但是每次它都显示错误消息“未找到数据” 。 为什么不显示列表视图? 错误显示如下: 08-28 14:15:22.861 1442-1666 /? E / Con ...

5 使用C#从SQLite读取Datetime

我使用sqllite DB创建了一个程序,可以在其中保存数据(ID /日期/名称)。 D B: 类型:数字 我尝试使用SQLite Reader来读出。 码: 输出: 如果我将其转换为Datetime,则只能得到2018年: 我怎样才能以年份的正 ...

2018-07-30 09:25:04 1 61   c#/ sqlite
6 记录不会从SQLite数据库中删除

我目前正在进行A Level计算机科学控制评估,在Android Studio,Java和XML中制作一个Scout Manager应用程序,我以前都没用过。 我现在正处于最后阶段,但我遇到了一个我似乎无法解决的错误。 我正在尝试从事件表中删除会话记录。 这在以前工作得很好,但是出于某 ...

7 从数据库读取SQLite DateTime值并将其分配给C#字符串变量

我有一个带有数据表的数据库,其中包括一个DateTime列。 使用SQL Server时,我可以使用以下代码从数据库中读取DateTime值: 更改代码以与SQLite一起运行后: 我不断收到以下错误:“字符串未被识别为有效的日期时间。” 我尝试了不同的组合和变量声明,但 ...

10 显示从数据库检索的图像(C#和JS)

我看到已经有许多主题看起来像我的,但是经过一些研究和努力,我仍然找不到能帮助解决我的特定问题的主题。 我已经编写了从数据库检索图像引用的C#代码。 此代码似乎按预期方式工作。 我还编写了som JS代码,该代码应使用提到的引用在html页面上放入“ src”。 JS代码肯定是问题所在 ...

暂无
暂无

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

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