我用SQL Server CE做数据库,做了一个小日记本程序。数据表主键是DateTime类型的,发现通过VC# 2008自动生成的数据集不能用FindByXXXX函数查找数据,返回的东西始终为null。
我感觉数据表中的数据比我的多了Millisecond,不知道如何忽略Millisecond比较。或者有其他方法?谢谢,在线等

解决方案 »

  1.   

    不知道是不是描述的不清楚:类似这样的代码DateTime dt1 = MyDiaryHelper.DbManagerInstance.DiaryTable[0].AddDateTime;
                    DateTime dt2 = AddDateTime;
                    dt1 = dt1.AddMilliseconds(-dt1.Millisecond);
                    dt2 = dt2.AddMilliseconds(-dt2.Millisecond);
                    object oo = MyDiaryHelper.DbManagerInstance.DiaryTable.FindByAddDateTime(dt2);
      

  2.   

    把主键转换成varchar的
    然后把每条数据的时间转成特定格式的日期字符串存入数据库
    这样比较和使用就方便了
      

  3.   

    SQL Server CE 数据库没接触过,那个微秒数据是不是搂主自己写进去的呢?
      

  4.   

    你的代码虽然减掉了毫秒,但数据库里的数据是有毫秒的,当然查不到
    既然你的需求不需要到毫秒,那么定义的字段也不应定义毫秒,定义smalldatetime,应该没有毫秒了。
      

  5.   

    我没仔细查DateTime是不是包含毫秒,不过可能性非常大,精确到三百分之一秒或3.33毫秒。
    SQL Server CE没有smalldatetime。
    我最后倒是用这样解决了:                MyDiary.Db.DiaryDataSet.DiaryRow di_row = null;
                    foreach (DataRow dr in MyDiaryHelper.DbManagerInstance.DiaryTable.Rows)
                    {
                        DateTime tmp = (DateTime)dr[0];
                        tmp = tmp.AddMilliseconds(-tmp.Millisecond); // 忽略千分之一秒差                    if (tmp == AddDateTime)
                        {
                            di_row = dr as MyDiary.Db.DiaryDataSet.DiaryRow;
                            break;
                        }
                    }
      

  6.   

    搂主为什么要操作微秒呢?不太明白,我想搂主如果不去关心他的话(也就是去掉所有Milliseconds的访问),应该不会自动把微秒也写到数据库了吧?呵呵,个人愚见而已,没有搞过这种数据库
      

  7.   

    DateTime可以包含微秒,这是肯定的但默认是没有的,也就是DateTime.Now.ToString()是没有的
      

  8.   

    最后我还是用int的ID主键重构了项目。
    另外回答一下上面的问题:
    1.SQL Server CE 是微软为移动设备的.net平台开发的轻量级数据库。但是我觉得用在桌面应用上一样很适合,感觉数据库的安全性和大小,运行效率都很满意。
    2.SQL Server CE中好像没有smalldatetime类型,毕竟是很简单的数据库。
    3.我的问题原因在于用datetime做主键,在vs2008生成的数据集中支持不太好。谢谢