我有一个选择,它使用WHERE子句中两个datetimepickers的datetime。 SELECT运行正常,填充数据网格,没有问题,但奇怪的是,SELECT的日期时间部分被完全忽略,整个事件返回一个记录集,好像只使用了“WHERE x_account_id =”+ subaccountID:
SqlCeConnection conn = new SqlCeConnection(Lib.ConnectionString);
string sql = "SELECT x_scaleid, x_weight, x_timestamp FROM x WHERE x_account_id = " + subaccountID
+ " AND (x_timestamp BETWEEN @start_date AND @end_date) ORDER BY x_timestamp DESC";
SqlCeCommand cmd = new SqlCeCommand(sql, conn);
cmd.Parameters.Add("@start_date", SqlDbType.DateTime, 8).Value = dFromFilter.Value.Date;
cmd.Parameters.Add("@end_date", SqlDbType.DateTime, 8).Value = dToFilter.Value.Date;
SqlCeDataAdapter da = new SqlCeDataAdapter();
da.SelectCommand = cmd;
无法在网上找到任何有同样问题的人,所以我有点卡住了。也许我最好尝试将所有日期时间转换为int,并以这种方式存储它们 - 总是讨厌使用datetime类型。
在有人要求之前,我已尝试过各种版本的条款,包括使用'<'和'>',以及不同的CONVERT变体。
答案 0 :(得分:0)
我'解决了'这个问题,'解决了'我的意思是放入黑客。
我在数据库中创建了一个新列,在x表中输入int。当我使用从应用程序派生的当前时间填充x_timestamp时,我使用以'yyyymmdd'格式构造的日期填充此新列。因此,在进行任何过滤时,使用日期,我可以使用选择的两个日期(在应用程序中再次转换为类似的int格式)进行数值比较。是一种享受。
它不是一个理想的解决方案,因为它复制数据库中的数据,但最后期限是最后期限,如果没有其他人可以在这里建议更好的,这个可能对其他任何有类似问题的人有所帮助未来。