2013-02-15 14 views
0

我剛剛在SQLite.NET庫中發現了一個錯誤。我有一個函數用Select命令的內容返回一個字符串數組。代碼如下:在正確的語句上選擇return empty

string selectSQL = "SELECT id, token FROM Files WHERE (name LIKE 'Client.rar') AND (folder_id IN (SELECT id FROM Directories WHERE Path || name || '\' LIKE 'C:\Documents and Settings\Django\'))"; 
SQLiteCommand selectCommand = new SQLiteCommand(selectSQL, sqliteCon); 
SQLiteDataReader dataReader = selectCommand.ExecuteReader(); 

bool results = dataReader.Read(); 
if (results == true) 
{ 
    List<string> list = new List<string>(); 
    for (int i = 0; i < dataReader.FieldCount; i++) 
    { 
     string field = dataReader[i].ToString(); 
     list.Add(field); 
    } 
    string[] arr = list.ToArray(); 

    dataReader.Close(); 
    sqliteCon.Close(); 
    return arr; 
} 
else 
{ 
    string[] arr = { "" }; 
    return arr; 
} 

使用SQLite數據瀏覽器程序查看數據庫。事實是,在以前的軟件中的查詢工作,並在我的C#應用​​程序返回一個空的結果。

任何人都知道在哪裏?看起來一切正常

問候!

+2

嘗試更改第一行:'字符串selectSQL = @「選擇ID ......」 – Pete 2013-02-15 17:48:21

+0

是什麼讓你認爲這是一個錯誤..看起來你可以有你是如何從DataReader的讀取問題? 。你怎麼不使用While循環,當你調試代碼..你是否得到'field'中的任何值,如果'arr'變量爲null或空,那麼在'list'中,然後嘗試這個'string [] arr = {};'arr = list.ToArray();' – MethodMan 2013-02-15 17:49:59

+0

一些建議:如果「以前的軟件有效」,那麼你做了一些事情,現在它不起作用,問題可能在於 – 2013-02-15 18:13:10

回答

1

我要繼續前進,使這一個答案:

嘗試更改第一行:

string selectSQL = @"SELECT id, token FROM Files WHERE (name LIKE 'Client.rar') AND (folder_id IN (SELECT id FROM Directories WHERE Path || name || '\' LIKE 'C:\Documents and Settings\Django\'))"; 

你有幾個反斜槓在字符串中,他們要去導致問題如果你不逃避他們。您可以選擇性地用兩個反斜槓(\\而不是\)替換所有反斜槓,並且不要將@放在字符串的前面。

+0

嗯,對不起! SELECT命令的字符串沒有反斜槓。我把完整的選擇,讓他們看看查詢是否正確。我使用的代碼如下: 字符串selectSQL =「SELECT ID,令牌以及文件,其中(名稱LIKE ' 「+姓名+」')和(folder_id IN(SELECT ID FROM目錄,其中path ||名稱||「\\ 'LIKE'「+ path +」'))「; – Mateu 2013-02-18 10:25:22