我正在尝试根据复选框从数据库中检索数据。当用户键入文本框并勾选所有文本框时,它将在数据库中生成所有结果。但问题是它说“无法将布尔值转换为字符串”和我的搜索工具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;
}
答案 0 :(得分:1)
标题是布尔值,你不能像在queryString中那样将它添加到字符串中。为什么Title Boolean仍然是一个字符串,所以你的方法可能设计不正确。
除此之外,你不应该创建这样的查询字符串,它让你对SQL注入攻击开放。阅读SqlParameters并使用参数化查询,它将为您节省很多麻烦。
答案 1 :(得分:0)
您的方法参数title
,author
和publisher
应该是String
,而不是Boolean
。除非您实际将这些值作为true
或false
存储在数据库中,但这似乎不太可能(并且不合逻辑)。
此外,您应该参数化SQL查询。
答案 2 :(得分:0)
标题作者和发布者是布尔值,但您使用它们的值来搜索数据库。
如果您需要进一步的帮助,请发布您的桌面设计。
答案 3 :(得分:0)
您的查询错误:
string queryString = "SELECT * FROM Lib_item WHERE title='" + title + "','" + author + "','" + publisher + "')";
您的查询中author
,title
和publisher
被视为strings
实际上它是boolean
因此转换错误。
假设您的表中的Author,Title和Publisher真的是布尔值,它可能看起来像这样:
string queryString = "SELECT * FROM Lib_item WHERE title='" + title + "'";
querystring += " AND hasAuthor = " + author + " AND hasPublisher = " + publisher;
但令人怀疑的是,您的Author
,Title
和Publisher
应该是字符串而不是布尔值,因此您的查询可能如下所示:
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
只是例子......