0

我有一个使用日期时间的选择,来自两个日期时间选择器,在 WHERE 子句中。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,并以这种方式存储它们 - 总是讨厌使用日期时间类型。

在有人问之前,我已经尝试了该子句的各种版本,包括使用“<”和“>”,以及不同的 CONVERT 变体。

4

1 回答 1

0

我“解决”了这个问题,而“解决”的意思是加入黑客攻击。

我在数据库中创建了一个新列,在 x 表中键入 int。当我用从应用程序派生的当前时间填充 x_timestamp 时,我用一个按日期构造的数字填充这个新列,格式为“yyyymmdd”。因此,在使用日期进行任何过滤时,我可以简单地使用选择的两个日期进行数值比较(再次在应用程序中转换为类似的 int 格式)。工作一种享受。

无论如何,这都不是一个理想的解决方案,因为它会复制数据库中的数据,但最后期限就是最后期限,如果没有其他人可以在这里提出更好的解决方案,那么这个解决方案可能会对将来遇到类似问题的其他人有所帮助。

于 2013-05-06T13:59:39.530 回答