使用SQL命令从C#中的数据库检索信息

使用SQL命令从C#中的数据库检索信息,c#,sql,.net,ms-access,C#,Sql,.net,Ms Access,我目前正试图成为一名C#的图书经理。我正在使用.ACCDB数据库来存储有关书籍的数据 首先,我检索属于以下特定系列的图书ID: sql.CommandText = "select * from BookTable where SeriesID = " + DataClass.SeriesTableIndex; 它检索BookIDs20和23。这些是与数据库中的序列ID相对应的正确图书ID 在此之后,我的代码将构建下一个sql命令。 我遗漏了司令部的功能建筑。 它构建以下代码: string s

我目前正试图成为一名C#的图书经理。我正在使用
.ACCDB
数据库来存储有关书籍的数据

首先,我检索属于以下特定系列的
图书ID

sql.CommandText = "select * from BookTable where SeriesID = " +
DataClass.SeriesTableIndex;
它检索
BookIDs
20
23
。这些是与数据库中的
序列ID
相对应的正确
图书ID

在此之后,我的代码将构建下一个sql命令。 我遗漏了司令部的功能建筑。 它构建以下代码:

string sqlcommand = "select * from BookTable where BookID = 23 or 20"
我使用此命令获取书籍名称:

sql.CommandText = sqlcommand;
它应该只返回
bookWithID23
bookWithID20
,但它也会返回
bookWithID21
。在我的测试数据库中只有3本书,但它以某种方式返回了全部3本,而不是系列中的2本


我对SQL一无所知,所以这可能是一个简单的语法错误。

的正确语法是():

此外,您还应始终使用以下方法来避免:

sql.CommandText = "select * from BookTable where SeriesID = @SeriesID";
sql.Parameters.AddWithValue("@SeriesID", DataClass.SeriesTableIndex);
尽管直接指定类型并使用
Value
属性比
AddWithValue
更好:

sql.Parameters.Add("@SeriesID", SqlDbType.Int).Value = DataClass.SeriesTableIndex;

BookID=23或20始终为真,因为“或20”是一个常数,其计算结果始终为真,因此这就是为什么您会得到表中的所有记录。你应该按照@S.Akbari的建议写信。这种行为不是SQLIt独有的,执行2个查询没有任何意义。第一个已经返回了您需要的书籍的所有列。
sql.Parameters.Add("@SeriesID", SqlDbType.Int).Value = DataClass.SeriesTableIndex;