2013-11-27 72 views
0

我想從數據庫檢索數據基於複選框。當用戶輸入文本框並勾選所有文本框時,它將在數據庫中產生全部結果。但問題是它說「不能將布爾轉換爲字符串」和我的搜索簿library.DatabaseServices.searchBook(string, bool, bool, bool):並非所有的代碼路徑都返回一個值。有人有線索嗎?可以讓搜索查詢工作c#

*注意:nevermind我的connectionString,數據源。它確定:)

[WebMethod] 
public string searchBook(String input, Boolean title, Boolean author, Boolean publisher) 
{ 
    string result =""; 
    string connectionString = 
     "Provider=Microsoft.Jet.OLEDB.4.0;" + 
     "Data Source='\\Library\\Book_data\\Lib_item.mdb';"; 

    string queryString = "SELECT * FROM Lib_item WHERE title='" + title + "','" + author + "','" + publisher + "')"; 

    using (OleDbConnection connection = new OleDbConnection(connectionString)) 
    { 
     title = true; 
     author = true; 
     publisher = true; 

     connection.Open(); 
     OleDbCommand command = connection.CreateCommand(); 
     command.CommandText = queryString; 
     command.ExecuteNonQuery(); 
     connection.Close(); 
     result += "Item added"; 
    } 
    return result; 
} 
+1

「它」 是編譯器在這裏,對不對?因此,連接字符串的語法是不相關的;它只是編譯器的一個任意字符串文字。您能否提供指明錯誤的源代碼中的確切位置? –

+0

你需要檢查你的查詢 – Ravi

+0

@Ravi,這些都是* compiler *錯誤。查詢在這一點上只是一個無意義的字符串,只要代碼甚至不能編譯,它在語法上還是語義上都是無關緊要的。 –

回答

1

標題是布爾值,你不能將它添加到像你在你的queryString中做的字符串。爲什麼布爾無論如何,它應該顯然是一個字符串,所以你的方法可能是不正確的設計。

最重要的是,你不應該創建這樣的查詢字符串,它讓你打開SQL注入攻擊。閱讀SqlParameters並使用參數化查詢,它將爲您節省很多麻煩。

0

您的方法參數title,authorpublisher應該是String而不是Boolean。除非您實際上將這些值存儲在數據庫中的值爲truefalse,但這似乎不可能(並且不合邏輯)。

此外,你應該參數化你的SQL查詢。

0

標題作者和發佈者是布爾值,但是您正在使用它們的值來搜索數據庫。

如果您需要更多幫助,請發表您的餐桌設計。

0

您的查詢是錯誤的:

string queryString = "SELECT * FROM Lib_item WHERE title='" + title + "','" + author + "','" + publisher + "')"; 

authortitlepublisher作爲strings處理在查詢 時,實際上它是boolean因此轉換錯誤。

讓我們假設作者,書名和出版商在你的表是真的布爾值,它可能看起來是這樣的:

string queryString = "SELECT * FROM Lib_item WHERE title='" + title + "'"; 
querystring += " AND hasAuthor = " + author + " AND hasPublisher = " + publisher; 

但懷疑這一點,你AuthorTitlePublisher應該是字符串,而不是布爾和因此,您的查詢看起來是這樣的:

string queryString = "SELECT * FROM Lib_item WHERE title='" + title + "'"; 
querystring += " AND Author = '" + author + "' AND Publisher = '" + publisher +"'"; 

順便說一句,如果上述的最後一個查詢是你的表怎麼看起來像那麼它是不是一個Normalized表這是壞的數據庫德如果有的話就簽名。

查看我的帖子在Normalization

0

除了parameterizing,它應該是AND/OR標準

與布爾之間WHERE條款

fld=value and fld=value and fld=value 
可能是...

fld1=value and fld2 and fld3 

但如果找一個假布爾將

fld1=value and fld2 and not fld3 

只是一個例子...