在c#中,不能让参数与OdbcConnection一起工作

本文关键字:OdbcConnection 一起 工作 参数 不能 | 更新日期: 2023-09-27 18:04:18

我正在运行一个具有几个日期约束的查询。如果我使用硬编码的日期和没有参数来执行下面的代码,我将得到我期望的结果(一个简单的整数)。然而,当我尝试使用参数时,我得到一个空的结果集。没有错误,只是没有结果。

log("Connecting to SQL Server...");
string connectionString = "DSN=HSBUSTEST32;";
string queryString = "SELECT COUNT(*) FROM Table WHERE myDateTime >= '?' AND myDateTime < '?'";
//string queryString = "SELECT COUNT(*) FROM Table WHERE myDateTime >= '@startDate' AND myDateTime < '@endDate'";
string startDate = "2016-08-23";
string endDate = "2016-08-24";
using (OdbcConnection connection = new OdbcConnection(connectionString))
{
    OdbcCommand command = new OdbcCommand(queryString, connection);
    command.Parameters.AddWithValue("startDate",startDate);
    command.Parameters.AddWithValue("endDate", endDate);
    //command.Parameters.Add("startDate", OdbcType.VarChar).Value = "2016-08-23";
    //command.Parameters.Add("endDate", OdbcType.VarChar).Value = "2016-08-24";
    try
    {
        connection.Open();
        OdbcDataReader reader = command.ExecuteReader();
        while (reader.Read())
        {
            log(reader[0].ToString());
        }
        reader.Close();
    }
    catch (Exception ex)
    {
        log(ex.Message);
    }
}

正如您所看到的,我已经尝试了命名参数以及使用?占位符。我还尝试了几种不同的方法来添加参数,Add()AddWithValue(),尽管说实话我不明白其中的区别。

是什么导致空结果?

在c#中,不能让参数与OdbcConnection一起工作

问题与你的查询就像我之前说的是单引号。如果传递的值不带参数,则需要使用单引号,因为这在语句中定义了字符串。

使用参数框架为您处理所有这些东西。它还检查sql注入并删除不允许的字符。特别是对于字符串和datetime值,这真的很有帮助。

继续使用:

string queryString = "SELECT COUNT(*) FROM Table WHERE myDateTime >= @startDate AND myDateTime < @endDate";

但是试试这个:

command.Parameters.AddWithValue("@startDate",startDate);
command.Parameters.AddWithValue("@endDate", endDate);