sqlite查询不匹配字符串

时间:2016-02-29 10:07:51

标签: c# database sqlite windows-10 win-universal-app

我有一个大约350个音乐文件的列表,我存储在sqlite表中。如果添加了新文件,则会将其添加到数据库中。所以我有一个查询来检查文件的路径是否在表中,如果没有,则插入它。但是3个文件永远不会匹配查询,即使它们在表中!因此,每次我启动应用程序时都会一遍又一遍地添加它们。

我正在使用SQLite for Universal Windows Platform&用于sql内容的SQLite.Net-PCL包。 File是我的自定义类,它存储每个文件中的一些字符串和其他文件属性。

 //database creation on first app launch
 using (var db = DbConnection)
 {
      var Trackdb = db.CreateTable<Query>();
 }

 //where I scan all files and add to db if not already there 
 var dbconn = DbConnection;
 foreach (File file in FileList)
 {
      var existingfile = dbconn.Query<Track>("select * from File where Path = '" + file .Path.Replace("'", "''") + "'").FirstOrDefault();
      if (existingtrack == null)
      {
          file.ID = dbconn.Insert(file);
          Debug.WriteLine(file.Path + " was added to db");
      }
 }

每次输出,从我看到的可能有2个字符可能导致这个,但为什么? “ - ”vs“ - ”和“ë”vs“e”。 sqlite没有配备处理这些字符或我的查询不够健壮吗?插入语句工作正常,让我相信它接受这些字符,因为它显示我的应用程序很好。

"C:\Data\Users\Public\Music\David Guetta & Avicii – Sunshine.mp3 was added to db"
"C:\Data\Users\Public\Music\Gotye - Somebody That I Used To Know (Tiësto Remix).mp3 was added to db"
"C:\Data\Users\Public\Music\Lana Del Rey – Summertime Sadness (Cedric Gervais Remix).mp3 was added to db"

编辑:由chue x解决

var existingfile = dbconn.Query<File>("SELECT * FROM Track WHERE Path = ?", file.Path.Replace("'", "''")).FirstOrDefault();

1 个答案:

答案 0 :(得分:0)

由chue x解决

         var existingfile = dbconn.Query<File>("SELECT * FROM File WHERE Path = ?", file.Path.Replace("'", "''")).FirstOrDefault();