2016-02-29 142 views
0

我有一個約350個音樂文件的列表,我存儲在一個sqlite表中。如果新文件被添加,它們將被添加到數據庫中。所以我有一個查詢來檢查文件的路徑是否在表中,如果沒有,然後插入它。但是,即使它們在表格中,3個文件也不匹配查詢!因此,每次啓動我的應用程序時,都會反覆添加它們。sqlite查詢不匹配字符串

我正在使用適用於通用Windows平臺的SQLite &用於SQL內容的SQLite.Net-PCL軟件包。文件是我的自定義類,它存儲每個文件的一些字符串和其他文件屬性。

//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「 - 」和「ë」與「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" 

編輯:由柱先生X解決

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

兩件事伸出:1)可以使用兩種不同類型的'File'和'Track',爲什麼? 2)你沒有參數化你的SQL,這可能與你的角色問題有關(「 - 」vs「 - 」和「ë」與「e」)。 –

+0

嗨,對不起,這是一個複製粘貼錯誤,它應該是查詢,你是什麼意思,我沒有參數化我的SQL? – user2704766

+0

我明白你的意思 - 看起來像是修復。謝謝! – user2704766

回答

0

通過柱先生X解決

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