可以获得搜索查询工作c#

时间:2013-11-27 12:26:13

标签: c#

我正在尝试根据复选框从数据库中检索数据。当用户键入文本框并勾选所有文本框时,它将在数据库中生成所有结果。但问题是它说“无法将布尔值转换为字符串”和我的搜索工具library.DatabaseServices.searchBook(string, bool, bool, bool):并非所有代码路径都返回一个值。有没有人有线索?

*注意:永远不要我的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;
}

5 个答案:

答案 0 :(得分:1)

标题是布尔值,你不能像在queryString中那样将它添加到字符串中。为什么Title Boolean仍然是一个字符串,所以你的方法可能设计不正确。

除此之外,你不应该创建这样的查询字符串,它让你对SQL注入攻击开放。阅读SqlParameters并使用参数化查询,它将为您节省很多麻烦。

答案 1 :(得分:0)

您的方法参数titleauthorpublisher应该是String,而不是Boolean。除非您实际将这些值作为truefalse存储在数据库中,但这似乎不太可能(并且不合逻辑)。

此外,您应该参数化SQL查询。

答案 2 :(得分:0)

标题作者和发布者是布尔值,但您使用它们的值来搜索数据库。

如果您需要进一步的帮助,请发布您的桌面设计。

答案 3 :(得分:0)

您的查询错误:

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

您的查询中authortitlepublisher被视为strings 实际上它是boolean因此转换错误。

假设您的表中的Author,Title和Publisher真的是布尔值,它可能看起来像这样:

 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中的帖子。

答案 4 :(得分: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

只是例子......