可以重構這個方法弄成這個樣子:
private IList<string> Load(string tableName, string columnName)
{
var result = new List<string>();
cn.Open();
OleDbDataReader reader = null;
OleDbCommand cmd = new OleDbCommand(string.Format("select* from {0}", tableName), cn);
reader = cmd.ExecuteReader();
while (reader.Read())
{
result.Add(reader[columnName].ToString());
}
cn.Close();
return result;
}
您的代碼示例將是:
var milkItems = Load("Milk", "Product");
var classicItems = Load("Classics", "..."); //Enter the column here.
編輯:
你可能想更具體的東西(例如,存儲List<SomeObject>
而不僅僅是List<string>
)。假設您有時想要返回一個Person
的列表,並且您還想閱讀Building
的列表。然後,你可以寫這樣的事情(沒有編譯&測試):
private IList<T> Load<T>(string tableName, Func<OleDbDataReader, T> selector)
{
IList<T> result = new List<T>();
cn.Open();
OleDbDataReader reader = null;
OleDbCommand cmd = new OleDbCommand(string.Format("select* from {0}", tableName), cn);
reader = cmd.ExecuteReader();
while (reader.Read())
{
result.Add(selector(reader));
}
cn.Close();
return result;
}
,你可以這樣調用它:
Func<OleDbDataReader, Person> selector = x => new Person { Name = x["Person"].ToString() };
Load("People", selector);
我在這裏發表評論,因爲它不直接相關的問題,但我會避免選擇所有列,除非你絕對必須的。 – 2013-02-26 08:49:37
您可以通過將牛奶和水果儲存在同一張表中並使用標識產品類型的ID來簡化您的生活。事實上,這通常會被推薦。 – 2013-02-26 08:45:06