SQLite Select Path始终返回Null

时间:2017-05-20 06:15:42

标签: c# sqlite system.data.sqlite

我试图选择这样的字符串:"\\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;
}

2 个答案:

答案 0 :(得分:0)

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

else
{
   return null;
}

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

希望有所帮助

答案 1 :(得分:0)

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

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;
}