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