In general, using a DataReader can have advantages over using a DataAdapter. But for populating a ComboBox I would recommend you to use the DataAdapter.
Some suggestion for you in the comments:
private void Form1_Load(object sender, EventArgs e)
{
comboBox1.DataSource = LoadDataTable("Database");
comboBox1.DisplayMember = "ProductDescription";
}
private void DataTable LoadDataTable(string tableName)
{
try
{
string connection = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=Database.mdb";
string sql = "Select * FROM " + tableName;
using (var dbConn = new OleDbConnection(connection))
using (var dbCmd = new OleDbCommand(sql, dbConn))
using (var dbAdapter = new OleDbDataAdapter())
{
DataTable dt = new DataTable(tableName);
dbAdapter.SelectCommand = dbCmd;
dbAdapter.Fill(dt);
return dt;
}
}
catch (Exception exc)
{
MessageBox.Show("Error: " + exc);
throw;
}
}
As you might have recognized, the method LoadDataTable(..) now allows you to use it for any table in your database: Just give it the name of the table as an argument and you get a DataTable returned. So you can re-use it for other ComboBoxes or completely different purposes than binding to some control.