【问题标题】:SQLite not returning rows, but manual execution of query doesSQLite 不返回行,但手动执行查询确实
【发布时间】:2023-03-22 07:15:01
【问题描述】:

我正在 SQLite for .NET 中执行此查询

string SQL = "SELECT * FROM EmployeeStats where TransactionDateTime = '$date'";

using (SQLiteCommand command = new SQLiteCommand(SQL, DbConnection as SQLiteConnection))
{
    command.Parameters.AddWithValue("$date", DateTime.Now.ToString(DateFormatterString));

    SQLiteDataReader reader = command.ExecuteReader();

    string query = command.CommandText;

    foreach (SQLiteParameter p in command.Parameters)
    {
        query = query.Replace(p.ParameterName, p.Value.ToString());
    }
}

阅读器返回零行。

我正在使用 foreach 循环生成 sql 查询。如果我在数据库中手动执行此循环生成的查询,那么它会返回正确的行。

目前,日期的数据库列设置为 TEXT。但是我也尝试过 DATE 和 TIMESTAMP 并将参数添加到此。但还是同样的问题:

command.Parameters.Add("$date", DbType.DateTime).Value = DateTime.Now.ToString(DateFormatterString);

查看此图像显示它在手动执行时工作正常。

编辑。我简化了这个例子。

【问题讨论】:

    标签: c# sql .net sqlite parameters


    【解决方案1】:
    SELECT * FROM EmployeeStats where TransactionDateTime = '$date'
    

    应该是

    SELECT * FROM EmployeeStats where TransactionDateTime = $date
    

    @date,或:date,取决于 SQL 变体;最坏的情况,也可能是

    SELECT * FROM EmployeeStats where TransactionDateTime = ?
    

    如果命名参数不是该提供程序上的“事物”。

    '$date' 是由 5 个字符组成的字符串文字:$date - 不是名为 date 的参数的值

    【讨论】:

    • 美丽。多年来,这一直困扰着我。这是我参数周围的单引号。删除这些并工作。
    猜你喜欢
    • 1970-01-01
    • 2017-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-05
    • 2017-11-05
    • 1970-01-01
    相关资源
    最近更新 更多