SQLite Select 路径总是 return 空

SQLite Select Path always return Null

我正在尝试 select 这样的字符串:"\Data\file - test.md"

我不明白为什么它一直不返回任何内容,但我可以在 SQLite 中插入

public List<String> Select(String Path)
{
    List<String> list = new List<String>();
    using (SQLiteCommand fmd = this.conn.CreateCommand())
    {
        fmd.CommandText = "SELECT * FROM FILE WHERE Path = ?";
        fmd.Parameters.Add(new SQLiteParameter(Path));
        fmd.CommandType = CommandType.Text;
        SQLiteDataReader r = fmd.ExecuteReader();
        if (r.HasRows)
        {
            while (r.Read())
            {
                list.Add(r.GetString(0));
                list.Add(r.GetString(1));
                list.Add(r.GetString(2));
            }
        }
        else
        {
           return null;
        }
    }
    return list;
}

如果返回null,则表示这部分代码中的函数returns

else
{
   return null;
}

那是 if (r.HasRows) 的其他部分。这意味着连接已建立并执行了查询,但没有记录与您传递的参数匹配。一个原因可能是您正在传递一个带有转义序列字符的字符串,而参数值不是您打算传递的值。请调试并确保 Path 变量没有跳过任何字符。就像如果您的搜索路径包含 \ 那么它应该作为 \ 传递以确保它与包含此字符的 FILE 中的值匹配。

希望对你有帮助

我发现我需要使用 @ 作为参数而不是?

public List<String> Select(String Path)
{
    List<String> list = new List<String>();
    using (SQLiteCommand fmd = this.conn.CreateCommand())
    {
        fmd.CommandText = "SELECT * FROM FILE WHERE Path = @path";
        fmd.Parameters.Add(new SQLiteParameter("@path", Path));
        fmd.CommandType = CommandType.Text;
        SQLiteDataReader r = fmd.ExecuteReader();
        if (r.HasRows)
        {
            while (r.Read())
            {
                list.Add(r.GetString(0));
                list.Add(r.GetString(1));
                list.Add(r.GetString(2));
            }
        }
        else
        {
            return null;
        }
    }
    return list;
}