gpt4 book ai didi

c# - 简化 OleDbDataReader 代码

转载 作者:太空宇宙 更新时间:2023-11-03 18:11:08 25 4
gpt4 key购买 nike

我做了一个程序,它读取数据库中的数据 我使用 OleDbDataReader 但问题是我有不同的表,这个代码工作得很好,但我发现它有点“硬编码”或 recursive 这是我的示例代码

        private void loadMilk()
{
cn.Open();
OleDbDataReader reader = null;
OleDbCommand cmd = new OleDbCommand("select* from Milk", cn);
reader = cmd.ExecuteReader();
while (reader.Read())
{
Milk.Add(reader["Product"].ToString());
}
cn.Close();
}

我需要一次又一次地重复这个,只是为了阅读另一张 table 上的内容(例如,“select* from Fruit 然后 “select* from Classics... .) 有什么办法可以让我不再一次又一次地重复这段代码吗?谢谢。:)

最佳答案

您可以将该方法重构为如下所示:

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);

关于c# - 简化 OleDbDataReader 代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15084623/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com