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();
兩件事伸出:1)可以使用兩種不同類型的'File'和'Track',爲什麼? 2)你沒有參數化你的SQL,這可能與你的角色問題有關(「 - 」vs「 - 」和「ë」與「e」)。 –
嗨,對不起,這是一個複製粘貼錯誤,它應該是查詢,你是什麼意思,我沒有參數化我的SQL? –
user2704766
我明白你的意思 - 看起來像是修復。謝謝! – user2704766