从表 SQL CE 服务器中选择返回 0 的日期

本文关键字:返回 日期 选择 SQL CE 服务器 从表 | 更新日期: 2023-09-27 18:33:44

我正在用C#开发一个Windows表单应用程序。我有一个查询,我想从日期到日期进行选择。结果始终为 0。我的数据库是一个.sdf文件,在我的表中,我有一个日期时间字段将订单日期存储为 DateTime.Now,我的 PC 日期格式是 10.12.2014,任何人都可以帮助我并解释为什么会发生这种情况..!有没有更好的文件格式可以保存在本地。?该应用程序将安装在多台PC上,日期时间格式会有问题吗?您的帮助非常感激。检查请提供一些代码。

internal static DataTable SearchItemsInOrders(string searchWord, string table, int minValue, int maxValue, out DataTable dtTable, DateTime dateFrom, DateTime dateTo)
{
    string commandText = "select A.ItemName, B.Site, B.OrderId, A.Qty, B.Requester, B.Receiver, B.Date ";
    commandText += "From tblOrderLine AS A Inner join tblOrder As B on A.OrderId=B.OrderId ";
    commandText += "where A.ItemName='" + searchWord + "' and B.Date >= '" + dateFrom.ToShortDateString() + "' and B.Date <='" + dateTo.ToShortDateString() + "' Order By A.OrderId DESC";
    SqlCeDataAdapter adp = new SqlCeDataAdapter();
    SqlCeConnection con = ConAndData.Con;
    dtTable = new DataTable();
    adp = new SqlCeDataAdapter(commandText, con);
    if (con.State == System.Data.ConnectionState.Closed)
    {
      con.Open();
    }
    adp.Fill(minValue, maxValue, dtTable);
    return dtTable;
}

从表 SQL CE 服务器中选择返回 0 的日期

尝试使用此查询,

string commandText = "select A.ItemName, B.Site, B.OrderId, A.Qty, B.Requester, B.Receiver, B.Date ";
            commandText += "From tblOrderLine AS A Inner join tblOrder As B on A.OrderId=B.OrderId ";
            commandText += "where A.ItemName='" + searchWord + "' and CONVERT(NVARCHAR(10),B.Date,121) >= CONVERT(NVARCHAR(10),'" + dateFrom.ToString("yyyy-MM-dd") + "',121) and CONVERT(NVARCHAR(10),B.Date,121) <= CONVERT(NVARCHAR(10),'" + dateTo.ToString("yyyy-MM-dd") + "',121) Order By A.OrderId DESC";

希望这有帮助...

正如评论中建议的那样 - 您必须使用参数化查询。

因此,您的命令文本应该是这样的:

string commandText = "select A.ItemName, B.Site, B.OrderId, A.Qty, B.Requester, B.Receiver, B.Date ";
commandText += "From tblOrderLine AS A Inner join tblOrder As B on A.OrderId=B.OrderId ";
commandText += "where A.ItemName=@ItemName and B.Date >= @DateFrom and B.Date <=@DateTo Order By A.OrderId DESC";

稍后您应该向命令添加参数和值:

adp = new SqlCeDataAdapter(commandText, con);
adp.SelectCommand.Parameters.Add("@ItemName", SqlDbType.NVarChar).Value = searchWord; 
adp.SelectCommand.Parameters.Add("@DateFrom", SqlDbType.DateTime).Value = dateFrom;
adp.SelectCommand.Parameters.Add("@DateTo", SqlDbType.DateTime).Value = dateTo;

这也将防止由 ToShortDateString() 生成的错误日期格式引起的可能问题。