参数化ODBC查询与VarChar一起使用但不适用于DateTime?

时间:2016-08-26 21:26:11

标签: c# sql odbc

作为this question的后续,当我手动将2016-05-01等日期定义为字符串/ varchars时,一切正常。但是,当我转换到datetime时,我现在又变得空洞了。这是代码:

log("Connecting to SQL Server...");
string connectionString = "DSN=HSBUSTEST32;";

// Provide the query string with a parameter placeholder.
string queryString = "SELECT COUNT(*) FROM Table WHERE myDateTime >= ? AND myDateTime < ?";

// Specify the parameter value.
DateTime startDate = DateTime.Now;
DateTime endDate = startDate.AddHours(-1);

using (OdbcConnection connection = new OdbcConnection(connectionString))
{
    // Create the Command and Parameter objects.
    OdbcCommand command = new OdbcCommand(queryString, connection);
    command.Parameters.Add("@startDate", OdbcType.DateTime).Value = startDate;
    command.Parameters.Add("@endDate", OdbcType.DateTime).Value = endDate;

    try
    {
        connection.Open();
        OdbcDataReader reader = command.ExecuteReader();
        while (reader.Read())
        {
            log(reader[0].ToString());
        }
        reader.Close();
    }
    catch (Exception ex)
    {
        log(ex.Message);
    }
}

同样,如果我要替换以下内容:

DateTime startDate = DateTime.Now;
DateTime endDate = startDate.AddHours(-1);

string startDate = "2016-08-23";
string endDate = "2016-08-24";

然后将OdbcType更改为VarChar一切正常。

2 个答案:

答案 0 :(得分:1)

我相信您的错误与日期范围有关。

// Specify the parameter value.
DateTime startDate = DateTime.Now;
DateTime endDate = startDate.AddHours(-1);

endDate比开始日期少1小时。查询中的比较运算符大于第一个参数且小于第二个参数。

例如:

string queryString = "SELECT COUNT(*) FROM Table WHERE myDateTime >= '8/26/2016 14:30:00' AND myDateTime < '8/26/2016 13:30:00'";

没有日期超过同一天的下午2:30和下午1:30。 :)

也许你的意思

DateTime startDate = DateTime.Now;
DateTime endDate = startDate.AddHours(1);

答案 1 :(得分:0)

问题与你的dateformat有关。你现在所经过的是一个有时间的约会,但你想只有约会。如果您仅使用Datetime中的Datepart,那么您应该很高兴。

您可以使用如下字符串格式执行此操作:

DateTime.Now.ToString("yyyy-MM-dd") 

或者使用日期属性:

DateTime.Now.Date;