c#使用OleDbDataReader从Access数据库中获取值

时间:2018-03-03 14:31:53

标签: c# oledb

我正在为学校项目建立一个图书馆系统,我已经在借阅系统了。我的数据库中有一列显示“可用性”,基本上会说该书是“借用”,“保留”还是“可用”,我试图从我的访问数据库中获取“可用”值OleDb包但它仍然不起作用。

private void btnBorrows_Click(object sender, EventArgs e)
    {
        string connectionString = @"Provider=Microsoft Office 12.0 Access Database Engine OLE DB Provider;" + @"Data source= C:\Users\Administrator\Desktop\dtbase\Database1.accdb";

        string queryString = "SELECT * FROM Books";
        string Av = string.Empty;
        try
        {
            using (OleDbConnection connection = new OleDbConnection(connectionString))
            {
                OleDbCommand command = new OleDbCommand(queryString, connection);
                connection.Open();
                OleDbDataReader reader = command.ExecuteReader();

                while (reader.Read())
                {
                    Av = reader.["Availability"].ToString();
                }

                if (Av == "Available")
                {
                command.Connection = connection;
                command.CommandText = "insert into AuditTrail (MemberID, MemberName, BookID, BookTitle, DateBorrowed, ReturnDate, Status) values ('" + txtbxMId.Text + "', '" + txtbxMN.Text + "', '" + txtbxBookId.Text + "', '" + txtbxBookTitle.Text + "', '" + txtbxDateNow.Text + "', '" + txtbxReturn.Text + "', '" + txtbxStatus.Text + "')";

                command.ExecuteNonQuery();
                MessageBox.Show("Borrowed!");
                }
                else
                {
                    MessageBox.Show("This Book Is Already Borrowed.");
                }
                reader.Close();
                connection.Close();
            }
        }
        catch (Exception ex)
        {
            MessageBox.Show("Failed to connect to data source" + ex);
        }

你可以看到我想到的第一件事是if else语句,我不知道我是否使用了包错误,因为每次运行程序时它总是跳到else语句,即使可用性的值是“可用”。

我的计划是,如果该书是“借用”或“保留”,则用户不能“借用”或“保留”它,但如果它是“可用”,则用户可以借用它。我实际上尝试过相反的方式

if (Av == "Borrowed" || Av == "Reserved")
   {
      MessageBox.Show("The Book is Already Borrowed.");
   }
else
   {
      //Do the thing
   }

但它总会说“书已被借用”

1 个答案:

答案 0 :(得分:0)

我知道这已经很老了,我确定您现在已经解决了,但是...如果不实际查看就无法确定...但是如果您有多行/记录,我认为是这样由于您的SELECT语句中没有过滤器或WHERE子句,因此始终返回“借用”。因此它将始终显示第一条记录。