【发布时间】:2018-09-09 12:41:22
【问题描述】:
我目前正在尝试用 C# 制作图书管理员。我正在使用.ACCDB 数据库来存储有关书籍的数据。
首先我检索属于特定系列的bookIDs:
sql.CommandText = "select * from BookTable where SeriesID = " +
DataClass.SeriesTableIndex;
它检索BookIDs 20 和23。这些是正确的BookIDs,对应于数据库中的SeriesID。
在此之后,我的代码将构建下一个 sql 命令。 我省略了命令的功能构建。 它构建了以下代码:
string sqlcommand = "select * from BookTable where BookID = 23 or 20"
我使用这个命令来获取书名:
sql.CommandText = sqlcommand;
它应该只返回bookWithID23 和bookWithID20,但它也返回bookWithID21。我的测试数据库中只有 3 本书,但它以某种方式返回了所有 3 本书,而不是系列中的 2 本书。
我对SQL一无所知,所以这可能是一个简单的语法错误。
【问题讨论】:
-
BookID = 23 或 20 始终为真,因为 'or 20' 是一个始终评估为真的常数,因此这就是您在表中获取所有记录的原因。你应该按照@S.Akbari 的建议写。这种行为不是 SQL 独有的
-
执行 2 个查询是没有意义的。第一个已经返回了你需要的书籍的所有栏目。