2

我正在构建一个存储一组日期时间的应用程序,以跟踪我何时打印特定报告。该报告由第二个表中的信息组成,该表也有日期时间。我试图让报告用仅在第一个表中的最后一个日期时间之后的记录填充数据网格视图。

第一个表称为“deliverylog”,该表存储过去的打印日期。第二个表称为“joblog”,它存储以前的作业条目的记录。

当我运行该程序时,它工作得很好,并用最后一个日期之后的所有记录填充网格视图,但它没有被改进......它只填充日期之后的日期而不是时间。我需要查询将gridview填充到第二个......

DateTime lastDeliveryDate;

private void getLastDelivery() // Sets global variable lastDeliveryDate to the last timestamp entered in the deliverylog table 
{
    openLogConnection();

    try
    {
        command = new SqlCeCommand("SELECT TOP 1 * FROM deliverylog ORDER BY Id DESC", logConn);

        drLogSet = command.ExecuteReader();
        while (drLogSet.Read())
        {
            lastDeliveryDate = Convert.ToDateTime(drLogSet["Timestamp"]);
        }
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
    }
    finally
    {
        logConn.Close();
    }
}

private void populateGridView()
{
    openLogConnection();

    try
    {
        command = new SqlCeCommand("SELECT * FROM joblog WHERE TimeStamp > @date", logConn);
        command.Parameters.AddWithValue("@date", lastDeliveryDate);

        dtLogSet = new DataTable();
        bsLogSet = new BindingSource();
        daLogSet = new SqlCeDataAdapter(command);
        cbLogSet = new SqlCeCommandBuilder(daLogSet);

        daLogSet.Fill(dtLogSet);
        bsLogSet.DataSource = dtLogSet;
        dataGridView1.DataSource = bsLogSet;

        dataGridView1.ColumnHeadersDefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
    }
    finally
    {
        logConn.Close();
    }
}

任何人都知道如何让这个工作正常吗?我将两个表的时间戳存储为日期时间数据类型,格式如下:“MM/dd/yyyy hh:mm:ss tt”

4

3 回答 3

0

我相信使用该AddWithValue方法会在内部转换值并且可能会失去所需的时间精度。相反,使用集合的Add(String, SqlDbType)方法重载:Parameters

var dateParameter = command.Parameters.Add("@date", SqlDbType.DateTime);
dateParameter.Value = this.lastDeliveryDate;

通过使用调试器检查变量,确保在设置参数值之前具有正确的值。

您可以尝试使用DATEDIFFSQL 函数而不是>运算符来确保正确的精度:

SELECT * FROM joblog WHERE DATEDIFF(second, @date, TimeStamp) > 0
于 2013-07-01T04:49:34.200 回答
0

问题可能是这一行:

lastDeliveryDate = Convert.ToDateTime(drLogSet["Timestamp"]);

假设您的TimeStamp字段是一种datetime类型,您应该使用:

lastDeliveryDate = (DateTime) drLogSet["TimeStamp"];

请确认您的TimeStamp字段的数据类型。

于 2013-07-01T15:27:24.357 回答
-1

您应该将日期格式化为 yyyyMMdd hh:mm:ss。

lastDeliveryDate.toString("yyyyMMdd hh:mm:ss")。

在这篇文章中有更多细节。 如何比较 sqlite TIMESTAMP 值

于 2013-07-01T01:24:28.757 回答