c# - 如何使用 C# 检索给定日期(无论时间)的记录?

标签 c# winforms ms-access

我正在尝试像这样检索存储在 Access 表中的记录总和

string query = "SELECT SUM(TOTAL) AS Expr1 FROM tblTicket WHERE (DATE_SALE = @date)";

try
{
    conn.Open();
    OleDbCommand cmd = new OleDbCommand(query, conn);
    cmd.Parameters.AddWithValue("@date", dt.Date);
    maxid = cmd.ExecuteScalar().ToString();
    conn.Close();
}

它不显示任何数据,但记录具有选定的日期。数据存储在 SALE_DATE 列中,如下所示 8/27/2014 5:35:56 PM 并且 dt 对象从 DateTimePicker 获取值.

最佳答案

使用 ... WHERE DateDiff("d",[MyDateParameter],[DATE_SALE])=0 的问题是表达式不是 sargable即使 [DATE_SALE] 列上有索引,数据库引擎也将被迫进行表扫描。更好的(可搜索的)方法是这样的:

using (var conn = new OleDbConnection())
{
    conn.ConnectionString = 
            @"Provider=Microsoft.ACE.OLEDB.12.0;" +
            @"Data Source=C:\Users\Public\Database1.accdb;";
    conn.Open();
    using (var cmd = new OleDbCommand())
    {
        cmd.Connection = conn;
        cmd.CommandText = 
                "SELECT SUM(TOTAL) AS Expr1 FROM tblTicket " + 
                "WHERE DATE_SALE>=? AND DATE_SALE<?";
        DateTime dt = dateTimePicker1.Value.Date;  // date selected
        cmd.Parameters.AddWithValue("?", dt);
        cmd.Parameters.AddWithValue("?", dt.AddDays(1));
        Object returnedValue = cmd.ExecuteScalar();
        if (DBNull.Value.Equals(returnedValue)) returnedValue = 0;
        this.textBox1.Text = returnedValue.ToString();  // display result
    }
    conn.Close();
}

关于c# - 如何使用 C# 检索给定日期(无论时间)的记录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25528757/

相关文章:

c# - NullReferenceException MVC4 C# 初学者最有可能失败

ms-access - 如何压缩MS Access数据库

ms-access - 每晚自动通过电子邮件发送 Access 2007 报告,无需用户操作

c# - 无需键入其类名即可获取枚举?

c# - 在 UI 线程中修改 ObservableCollection 会导致错误,即使在使用 UI 调度程序时也是如此

c# - 如何正确使用 "this"访问表单控件?

c# - 如何使用 C# 完全隐藏 Windows 窗体中的顶部栏

c# - DataGridViewComboBoxColumn 选定值/索引

java - 尝试使用 Jackcess 打开 Access 数据库文件时出现 "Empty database file"异常

c# - 由任何非数字字符串分隔的拆分数字